• 设计模式 —— 代理模式


    代理模式也是“接口隔离”模式的一种。

    动机

    • 在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或某些操作系统需要安全控制,或需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。
    • 如何在不失去透明操作对象的同时来管理、控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。

    模式定义

    对其他对象提供一种代理控制(隔离,使用接口)对这个对象的访问。    —— 《设计模式》GOF

    结构

    •  Subject:定义RealSubject和Proxy的共用接口,。这样就可以在任何使用RealSubject的地方使用Proxy
    • RealSubject:真实处理业务的角色
    • Proxy:保存一个引用使得代理可以访问实体。提供一个与subject的接口相同的接口,这样代理就可以代替实体。

    实现

    实例:小明刚毕业参加工作,想在公司附近租一间房子,但是对环境又不熟悉,所以他想找一个房产中介来帮他租房。

     1 #include <iostream>
     2 #include <string>
     3 
     4 using namespace std;
     5 
     6 // Subject
     7 class Person {
     8    public:
     9     virtual void rentHouse() = 0;
    10 };
    11 
    12 // RealSubject
    13 class XiaoMing : public Person {
    14    public:
    15     void rentHouse() { cout << "小明想租一间房子" << endl; }
    16 };
    17 
    18 // Proxy
    19 class Intermediary : public Person {
    20    public:
    21     Intermediary(Person* person) : m_Person(person) {}
    22     void rentHouse() {
    23         m_Person->rentHouse();
    24         cout << "中介赚取佣金百分之十" << endl;
    25     }
    26 
    27    private:
    28     Person* m_Person;
    29 };
    30 
    31 int main() {
    32     //小明
    33     Person* xiaoMing = new XiaoMing;
    34     //找一个中介租房子
    35     Person* intermediary = new Intermediary(xiaoMing);
    36     intermediary->rentHouse();
    37     return 0;
    38 }
    Proxy-example

    要点总结

    • “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。
    • 具体Proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做Proxy。
    • Proxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。
  • 相关阅读:
    Ant简单工程的构建
    [转载] 无所不能的“蚂蚁”--Ant
    引体向上高级技巧:停顿式引体向上!
    引体向上腰酸?下背痛?你做对了吗?
    划船训练常见错误:含胸驼背肩胛骨活动不足
    引体向上
    仰卧飞鸟:仰卧哑铃飞鸟图解教程
    蝶机夹胸:蝴蝶机夹胸夹胸/飞鸟动作图解教程
    史密斯卧推:杠铃史密斯下斜卧推、上斜机卧推、平板卧推动作图解
    练胸秘籍:胸肌训练5大重点
  • 原文地址:https://www.cnblogs.com/y4247464/p/15499064.html
Copyright © 2020-2023  润新知