[设计模式C++go]结构型模式:代理模式
Posted 凌星An
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[设计模式C++go]结构型模式:代理模式相关的知识,希望对你有一定的参考价值。
文章目录
代理模式
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
其定义为:Provide a surrogate or placeholder for another object to control
access toit.(为其他对象提供—种代理以控制对这个对象的访问。)
介绍
意图: 为其他对象提供一种代理以控制对这个对象的访问。
主要解决: 在直接访问对象时带来的问题,
要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
何时使用: 想在访问一个类时做一些控制。
如何解决: 增加中间层。
关键代码: 实现与被代理类组合。
类图
Subject :抽象,可以是抽象类也可以是接口
RealSubject:可叫做被委托角色、被代理角色,是业务逻辑的具体执行者。
Proxy:可叫做委托类、代理类。它负责对真实角色的应用,把所有抽象类定义的方法限制委托给真实角色实现,并且在真实角色处理完毕前后做预处理和善后处理工作
代码实现
我们都知道如果电脑损坏严重,我们拿到电脑专卖店后,店家会帮我们进行返厂进行修理,修好后再给我们拿回来;其实就这蕴含着我们今天要学习的代理模式
C++
class Service
public:
virtual void Fix() =0 ;
;
class Factory :public Service
public:
void Fix()
std::cout<<"fixing computer"<<std::endl;
;
class ComputerStore:public Service
public:
ComputerStore(Factory f)
Fac = f;
void Fix()
std::cout << "send to factory" << std::endl;
Fac.Fix();
std::cout << "receive Computer from factory" << std::endl;
std::cout << "call xxxxxxx" << std::endl;
private:
Factory Fac;
;
测试
Factory f;
ComputerStore cs = ComputerStore(f);
cs.Fix();
send to factory
fixing computer
receive Computer from factory
call xxxxxxx
Go
package Proxy
import "fmt"
type Service interface
Fix()
type Factory struct
func (f *Factory) Fix()
fmt.Println("fixing computer")
type ComputerStore struct
F Factory
func (c *ComputerStore) Fix()
fmt.Println("send to factory")
c.F.Fix()
fmt.Println("receive Computer from factory")
fmt.Println("call xxxxxxx")
测试
p := Proxy.ComputerStoreProxy.Factory
p.Fix()
send to factory
fixing computer
receive Computer from factory
call xxxxxxx
优缺点
优点:
1、职责清晰。
2、高扩展性。
3、智能化。
缺点:
1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
注意事项:
1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
以上是关于[设计模式C++go]结构型模式:代理模式的主要内容,如果未能解决你的问题,请参考以下文章