c++设计模式概述之代理

代码写的不规范,目的是缩短文章篇幅,实际中请不要这样做。


1、模式的结构
  代理模式的主要角色如下:
  A、抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
  B、真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
  C、代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能

2、范例

  下面 以 演员为例, 演员有替身和真实演员之分,替身上场就是代替真实演员的。

 

3、抽象主题

// 演员都具有的才艺
class player
{
public:
    virtual void act() = 0;
};

 

4、 真实主题(真实演员)

// 真实演员
class player_real : public player
{
public:
    void act()
    {
        std::cout << "\n 真实演员表演中" << std::endl;
    }
};

 

5、 代理

// 替身演员
class player_instead : public player
{
public:
    void act()
    {
        std::cout << "替身上场中\n";
        _player_real.act();
        std::cout << "替身又上场了\n\n";
    }
    
private:
    player_real _player_real;
};

 

6、调用

void call_proxy()
{
    std::unique_ptr<player_instead> ppi(new(std::nothrow) player_instead);
    if (!ppi)
    {
        std::cout << "\n创建代理对象失败\n";
        return;
    }
    
    ppi->act();
}

 

7、 输出结果

 

posted @ 2020-08-12 21:43  mohist  阅读(148)  评论(0编辑  收藏  举报