您的位置:首页 > 文旅 > 美景 > b2b网站有哪些小众的_手机端网站优化_百度搜索入口网址_网络培训系统

b2b网站有哪些小众的_手机端网站优化_百度搜索入口网址_网络培训系统

2024/10/7 4:28:38 来源:https://blog.csdn.net/qq_74811378/article/details/142417716  浏览:    关键词:b2b网站有哪些小众的_手机端网站优化_百度搜索入口网址_网络培训系统
b2b网站有哪些小众的_手机端网站优化_百度搜索入口网址_网络培训系统

一、代理设计模式概念

代理模式 (Proxy) 是一种结构型设计模式, 为其他对象提供一种代理以控制对这个对象的访问

  • 代理模式介绍了一种访问对象的间接等级。
  • 一个远程代理可以隐藏一个对象在不同地址空间的细节。
  • 一个虚拟代理可以根据需要最优化创建对象的开销。
  • 而安全代理和智能指引都允许访问对象的同时处理其他事务。
  • 适用chang
  • 延迟初始化 (虚拟代理)。 如果你有一个偶尔使用的重量级服务对象, 一直保持该对象运行会消耗系统资源时, 可使用代理模式。
  • 访问控制 (保护代理)。 如果你只希望特定客户端使用服务对象, 这里的对象可以是操作系统中非常重要的部分, 而客户端则是各种已启动的程序 (包括恶意程序), 此时可使用代理模式。
  • 本地执行远程服务 (远程代理)。 适用于服务对象位于远程服务器上的情形。
  • 记录日志请求 (日志记录代理)。 适用于当你需要保存对于服务对象的请求历史记录时。 代理可以在向服务传递请求前进行记录。
  • 智能引用。 可在没有客户端使用某个重量级对象时立即销毁该对象。

代理设计模式的结构

  1. 服务接口 (Service Interface) 声明了服务接口。 代理必须遵循该接口才能伪装成服务对象。
  2. 服务 (Service) 类提供了一些实用的业务逻辑。
  3. 代理 (Proxy) 类包含一个指向服务对象的引用成员变量。 代理完成其任务 (例如延迟初始化、 记录日志、 访问控制和缓存等) 后会将请求传递给服务对象。 通常情况下, 代理会对其服务对象的整个生命周期进行管理。
  4. 客户端 (Client) 能通过同一接口与服务或代理进行交互, 所以你可在一切需要服务对象的代码中使用代理。

代码如下:

        问题:系统需要访问数据库,但需要对数据的访问做一些优化,例如缓存查询结果、生成访问日志、访问控制
        解决方案:为其他对象提供一种代理以控制这个对象的访问。即新建一个与原服务对象接口相同的代理类,代理将自己伪装成数据库对象,对客户而言是透明的

#include <iostream>
//接口:真实数据库和代理数据库都依赖该接口
class DataBase
{
public:virtual void request() const = 0;
};//
class RealDatabase : public DataBase
{
public:void request() const override{std::cout << "---真实数据库:处理业务请求。" << std::endl;}
};
//
class ProxyDatabase : public DataBase
{
private:RealDatabase* m_realDatabase;bool checkAccess() const{std::cout << "代理数据库:检查权限。" << std::endl;return true;}void log()const{std::cout << "代理数据库:记录日志。" << std::endl;}
public:ProxyDatabase(RealDatabase* realDatabase) :m_realDatabase(realDatabase) {}void request() const override{if (checkAccess()) {std::cout << "代理数据库:处理业务请求。" << std::endl;m_realDatabase->request();log();}else{std::cout << "代理数据库:拒绝访问。" << std::endl;}}};void clientCode(const DataBase& dataBase)
{dataBase.request();
}
int main()
{std::cout << "直接使用真实数据库处理请求:" << std::endl;RealDatabase realDatabase;clientCode(realDatabase);std::cout << "通过代理数据库处理请求:" << std::endl;ProxyDatabase proxyDatabase(&realDatabase);clientCode(proxyDatabase);return 0;
}

 二、与其他模式的关系

  • 适配器模式 (opens new window)能为被封装对象提供不同的接口, 代理模式 (opens new window)能为对象提供相同的接口, 装饰模式 (opens new window)则能为对象提供加强的接口。
  • 外观模式 (opens new window)与代理 (opens new window)的相似之处在于它们都缓存了一个复杂实体并自行对其进行初始化。 代理与其服务对象遵循同一接口, 使得自己和服务对象可以互换, 在这一点上它与外观不同。
  • 装饰 (opens new window)和代理 (opens new window)有着相似的结构, 但是其意图却非常不同。 这两个模式的构建都基于组合原则, 也就是说一个对象应该将部分工作委派给另一个对象。 两者之间的不同之处在于代理通常自行管理其服务对象的生命周期, 而装饰的生成则总是由客户端进行控制。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com