代理模式有俩个英文名字:Proxy Pattern SurrogatePattern
  定义:为期货对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或
者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户
不能看到的内容和服务或者增添客户需要的额外服务。
JAVA与模式中将代理模式分为8种:常见的有1.远程代理(remote);2.虚拟代理(virtual);3.保护代理(Protect or Access);
4.智能引用(Smart Reference)代理等。
结构:
1.抽象主题角色:声明了真实主题和代理主题的共同接口。
2.代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相贩接口。
3.真实主题角色:定义真实的对象

class Subject
{
public:
 Subject(){}
 virtual ~Subject(){}

 virtual void Request() = 0;
};

// 真正使用的实体
class RealSubject
 : public Subject
{
public:
 RealSubject();
 virtual ~RealSubject(){}

 virtual void Request()

std::cout << "Request By RealSubject\n";

};

// 代理类,含有一个指向RealSubject对象的指针
class Proxy
 : public Subject
{
public:
 Proxy()
 : m_pRealSubject(NULL)
{
 std::cout << "Constructing a Proxy\n";
}
 virtual ~Proxy()
{
 delete m_pRealSubject;
 m_pRealSubject = NULL;
}

 virtual void Request()
{
 // 需要使用RealSubject的时候才去初始化
 if (NULL == m_pRealSubject)
 {
  std::cout << "Request By Proxy\n";
  m_pRealSubject = new RealSubject();
 }
 m_pRealSubject->Request();
}

private:
 RealSubject* m_pRealSubject;
};

int main()
{
 Subject* pProxy = new Proxy();
 pProxy->Request();

 delete pProxy;

 return 0;
}


五、总结
代理模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合度。代理模式
中的真实主题角色可以结合组合模式来构造,这样一个代理主题角色就可以对一系列的真实
主题角色有效,提高代码利用率,减少不必要子类的产生。
posted on 2011-12-29 23:32 柳清风 阅读(170) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


统计