【c++设计模式】代理模式

代理模式:简单来说,就是因为某些原因需要给某对象提供一个代理以控制对该对象的访问。举个实际的例子,一个人不想租房,请了中介去帮忙租房,这就是一种代理模式。

结构:

抽象主题(Subject):通过接口或抽象类声明真实主题和代理对象实现的业务方法,比如在租房的例子中就是人;

真实主题(Real Subject):实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象,比如租房的例子中就是租房子的人;

代理(Proxy):供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能,比如在租房的例子中就是中介代理人;

 代码:

//Subject
class Person {
public:
  
virtual void rentHouse() = 0; }; //RealSubject class Tom :public Person { public: void rentHouse() { cout << "Tom想要租一间房子" << endl; } }; //Proxy class Proxy :public Person { public: Proxy(Person* person) :m_Person(person) {} void rentHouse() { m_Person->rentHouse(); //对RealSubject实体的rentHouse找一个房子 cout << "中介找房子" <<endl; } private: Person* m_Person; }; int main() { Person* tom = new Tom; Person* proxy = new Proxy(tom); proxy->rentHouse(); return 0; }

代理模式的主要优点有:

代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;

代理对象可以扩展目标对象的功能;

代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性

其主要缺点是:

代理模式会造成系统设计中类的数量增加;

在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;

增加了系统的复杂度;

posted @ 2022-06-12 12:05  一只雷史莱姆  阅读(301)  评论(0编辑  收藏  举报