一,代理模式
1.1,对代理模式的理解
代理模式: 为其他对象提供一种代理以控制对这个对象的访问。
1.2,解决的问题
防止直接访问目标对象给系统带来的不必要复杂性。
1.3,应用场景
通过代理实现数据库的操作,下面是程序的结构框图与具体的程序实现

// 数据库访问接口
class IDBManager
{
public:
void insert();
};
// 实现类
class SQLServer : public IDBManager
{
public:
void insert()
{
// 实现往数据库插入记录的操作
}
};
// 代理
class Proxy : public IDBManager
{
private:
IDBManager *m_pDBManager;
public:
Proxy()
{
m_pDBManager = new SQLServer();
}
void insert()
{
m_pDBManager->insert();
}
};
// 客户端代码
void main()
{
Proxy *proxy = new Proxy();
// 通过代理调用被代理对象中的方法
proxy->insert();
}
1.4,代理模式的优缺点
优点:
- 起到中介隔离作用,在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
- 提高系统的可扩展性,可以通过给代理类增加额外的功能来扩展委托类的功能,这样做只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。代理类本身并不真正实现服务,而是通过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。例如想给项目加入缓存、日志这些功能,就可以使用代理类来完成,而没必要打开已经封装好的委托类。
缺点:
- 由于在客户端和委托类之间增加了代理对象,因此会造成请求的处理速度变慢。
- 现代理模式需要额外的工作(有些代理模式的实现非常复杂),从而增加了系统实现的复杂度。
1.5,代理模式的应用
对代理模式的应用一般分为下面几种:
- 远程代理: 就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
- 虚拟代理: 通过代理来存放实例化需要很长时间的对象。
- 安全代理: 用来控制真实对象访问时的权限。
- 智能引用: 当调用真实的对象时,代理处理另外一些事。
本文深入探讨了代理模式的概念,包括其定义、应用场景、优缺点及多种类型,如远程代理、虚拟代理、安全代理和智能引用。并通过一个数据库操作的示例,详细展示了代理模式如何在实际编程中应用。
168万+

被折叠的 条评论
为什么被折叠?



