Skip to content

外观模式

回到目录

简介

参考链接 链接一

UML类图

代码示例

#include <iostream>

class ISubject {
public:
  virtual void Request() = 0;
};

class RealSubject: public ISubject {
public:
  virtual void Request() {
    std::cout << "RealSubject::Request" << std::endl;
  }
};

class ProxySubject: public ISubject {
public:
  ProxySubject(ISubject *subject): subject_(subject) {}
  virtual void Request() {
    std::cout << "ProxySubject::Request" << std::endl;
    subject_->Request();
  }
private:
  ISubject *subject_;
};

// 延时代理
class ProxySubject2: public ISubject {
public:
  ProxySubject2(): subject_(nullptr) {}
  virtual void Request() {
    if (!subject_) {
      subject_ = new RealSubject();
    }
    std::cout << "ProxySubject2::Request" << std::endl;
    subject_->Request();
  }
private:
  ISubject *subject_;
};

int main() {
  ISubject *subject = new RealSubject();
  ProxySubject *proxy_subject = new ProxySubject(subject);
  proxy_subject->Request();

  ProxySubject2 *proxy_subject2 = new ProxySubject2();
  proxy_subject2->Request();


  delete subject;
  delete proxy_subject;
  return 0;
}