lnmp wordpress网站,网站的建设技术有哪些,网站建设的商业目的,主题网站建设一、代理模式简介
代理模式#xff08;Proxy Pattern#xff09;是一种结构型设计模式#xff08;GoF书中解释结构型设计模式#xff1a;一种用来处理类或对象、模块的组合关系的模式#xff09;#xff0c;代理模式是其中的一种#xff0c;它可以为其他对象提供一种代…一、代理模式简介
代理模式Proxy Pattern是一种结构型设计模式GoF书中解释结构型设计模式一种用来处理类或对象、模块的组合关系的模式代理模式是其中的一种它可以为其他对象提供一种代理Proxy以控制对这个对象的访问。所谓代理是指具有与代理元被代理的对象具有相同的接口的类客户端必须通过代理与被代理的目标类交互而代理一般在交互的过程中交互前后进行某些特别的处理。
GoF一书对代理模式的介绍 代理模式适用于为其他对象提供一种代理以控制对这个对象的访问。
二、代理模式的用处 控制访问权限 代理模式可以用来控制对实际对象的访问。例如可以通过代理对象实现权限验证只允许特定用户访问实际对象。 延迟初始化虚拟代理 代理模式可以用于延迟对象的创建和初始化。实际对象的创建可能是昂贵的操作如加载大文件或从数据库中获取数据可以通过代理对象来延迟实际对象的创建直到需要时才创建。 远程代理远程访问 代理模式可以用于处理远程对象的访问。客户端通过代理对象访问远程对象代理对象负责处理与远程对象的通信细节。这种模式常用于分布式系统和网络应用中。 缓存代理 代理模式可以用来缓存实际对象的结果。代理对象可以缓存计算结果以避免对实际对象进行重复计算。这在处理昂贵操作或需要频繁访问的数据时特别有用。 日志记录和监控 代理模式可以用来记录对实际对象的操作日志或进行监控。通过代理对象可以轻松地插入日志记录功能以跟踪实际对象的使用情况。 三、代理模式的设计方法 设计场景
出版社实际对象负责管理和销售书籍。淘宝、拼多多、京东代理对象分别提供不同的销售和服务策略。客户端从出版社或代理对象购买书籍。
proxy.cpp
#include iostream
#include memory
#include string// 书店
class BookStore {
public:virtual ~BookStore() default;virtual void sellBook(const std::string book) const 0;
};// 出版社负责实际销售书籍
class Publisher : public BookStore {
public:void sellBook(const std::string book) const override {std::cout 出版社: 卖 book 设计模式书 std::endl;}
};// 代理类 - 淘宝
class TaobaoProxy : public BookStore {
public:TaobaoProxy() : publisher(std::make_uniquePublisher()) {}void sellBook(const std::string book) const override {std::cout 淘宝: 本店购买 book ,提供一条龙售后服务 std::endl;publisher-sellBook(book);}private:std::unique_ptrPublisher publisher;
};// 代理类 - 拼多多
class PinduoduoProxy : public BookStore {
public:PinduoduoProxy() : publisher(std::make_uniquePublisher()) {}void sellBook(const std::string book) const override {std::cout 拼多多: 本店购买 book ,一半折扣出售 std::endl;publisher-sellBook(book);}private:std::unique_ptrPublisher publisher;
};// 代理类 - 京东
class JingdongProxy : public BookStore {
public:JingdongProxy() : publisher(std::make_uniquePublisher()) {}void sellBook(const std::string book) const override {std::cout 京东: 本店购买 book ,提供质量保证 std::endl;publisher-sellBook(book);}private:std::unique_ptrPublisher publisher;
};// 客户端代码
void doWorking() {std::unique_ptrBookStore publisher std::make_uniquePublisher();std::unique_ptrBookStore taobao std::make_uniqueTaobaoProxy();std::unique_ptrBookStore pinduoduo std::make_uniquePinduoduoProxy();std::unique_ptrBookStore jingdong std::make_uniqueJingdongProxy();// 从出版社直接购买书籍std::cout 线下 std::endl;publisher-sellBook(Gang of Four);std::cout 线上 std::endl;// 从淘宝购买书籍taobao-sellBook(Gang of Four);printf(\n);// 从拼多多购买书籍pinduoduo-sellBook(Gang of Four);printf(\n);// 从京东购买书籍jingdong-sellBook(Gang of Four);return ;
}int main() {//干活doWorking();return 0;
}
运行效果 四、总结
代理模式作为结构型设计模式之一广泛应用于软件设计的各个领域其核心就是引入一个代理对象来控制对目标对象的访问。在实际生活和软件系统中代理模式有很多体现比如代驾、代练、代购机票等都能看做是代理模式的实际应用。举例在组织结构中秘书通常被视为老板的代理他们帮助处理外来事务转达重要信息代理老板的职责。此外在网络通信中代理服务器也是代理模式的典型应用它提供了中转服务对外可以隐藏内部网络结构对内则对外部请求进行过滤和处理。在软件系统中代理模式的典型应用包括虚拟代理、远程代理、保护代理等可以提高系统响应能力、简化接口、控制访问等。通过这种方式代理模式在降低系统复杂性以及提高灵活性和可维护性方面发挥了重要作用。