[设计模式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]结构型模式:代理模式的主要内容,如果未能解决你的问题,请参考以下文章

[设计模式C++go]结构型模式:代理模式

代理设计模式详解C/Java/JS/Go/Python/TS不同语言实现

使用Go实现GoF的23种设计模式

[08]Go设计模式:代理模式(ProxyPattern)

代理模式

代理模式