C++设计模式浅识外观模式

原创 2016年06月01日 06:54:47

外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

两大角色:

  1. 外观类Facade: 知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。
  2. 子系统集合SubSystem: 实现子系统的功能,处理Facade对象指派的任务。注意:子类没有Facade的任何信息,即没有对Facade对象的引用。

本文以购买基金为例,客户只需买入卖出基金(Facade),而其中的股票1、股票2、股票3等(SubSystem)操作由基金公司负责处理。

测试用例:

int main(){
    Fund fund;//基金对象(Facade)
    fund.fundBuy();//stock1 buy stock2 buy stock3 buy
    fund.fundSell(); //stock1 sell stcok2 sell stock3 sell

    return 0;
}

外观模式实现:

//子系统不知道Facade的任何信息
//股票1号
class Stock1{
public:
    void sell(){
        std::cout << "stock1 sell\n";
    }
    void buy(){
        std::cout << "stock1 buy\n";
    }
};
//股票2号
class Stock2{
public:
    void sell(){
        std::cout << "stcok2 sell\n";
    }
    void buy(){
        std::cout << "stock2 buy\n";
    }
};
//股票3号
class Stock3{
public:
    void sell(){
        std::cout << "stock3 sell\n";
    }
    void buy(){
        std::cout << "stock3 buy\n";
    }
};

//基金类是Facade
class Fund{
public:
    Stock1 stock1;
    Stock2 stock2;
    Stock3 stock3;
    void fundSell(){
        stock1.sell();
        stock2.sell();
        stock3.sell();
    }
    void fundBuy(){
        stock1.buy();
        stock2.buy();
        stock3.buy();
    }
};

何时使用外观模式?

  1. 在设计初期,应该要有意识的将不同的两个层分离。
  2. 在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂。
  3. 在维护一个遗留的大型系统时,可以将原系统高度复杂的代码或设计粗糙的代码以比较简单清晰的接口让新系统与Facade对象交互。
版权声明:本文为博主原创文章,转载请注明出处。

最常用的设计模式---外观模式(C++实现)

外观模式:提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。目地:让接口变得简单,是为了简化子系统的接口。...
  • lh844386434
  • lh844386434
  • 2014年01月09日 17:25
  • 1618

JAVA设计模式之门面模式(外观模式)

医院的例子   现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门...
  • jason0539
  • jason0539
  • 2014年04月02日 07:16
  • 25061

【游戏设计模式】之四 《游戏编程模式》全书内容提炼总结

这是一篇超过万字读书笔记,总结了《游戏编程模式》一书中所有章节与内容的知识梗概。 我们知道,游戏行业其实一直很缺一本系统介绍游戏编程进阶技巧的书籍,而《游戏编程模式》得出现,正好弥补了这一点。在这篇文...
  • zhmxy555
  • zhmxy555
  • 2016年11月20日 14:19
  • 51011

设计模式 - 外观模式(C++实例)

  • 2012年11月21日 10:52
  • 6KB
  • 下载

C++设计模式九--FacadePattern(外观模式)

C++ 设计模式 FacadePattern 外观模式
  • zhaoxd200808501
  • zhaoxd200808501
  • 2017年06月27日 16:37
  • 167

我所理解的设计模式(C++实现)——外观模式(Facade Pattern)

概述 想想我们小时候玩的四驱车,里面的构造很复杂,马达,舵机,电池组等等,而我们控制它却非常简单,只要打开电池开关,他就可以跑。我们其实不用知道它里面是如何工作,只要知道拨动开关它就可以工作就行...
  • tanningzhong
  • tanningzhong
  • 2015年01月24日 14:46
  • 389

c++设计模式之外观模式

迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。 如果其中一个类需要调用另一个类的某一个方法的话,就可以通过第三者转发 迪米特法则的首先强调...
  • wanghaobo920
  • wanghaobo920
  • 2012年09月30日 18:54
  • 302

C++设计模式7--外观模式--The Client don't want to know

1基本信息 共有两类适配器模式: 对象适配器模式 -- 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。 类适配器模式 -- 这种适配器模式下,适...
  • gatieme
  • gatieme
  • 2014年01月08日 16:23
  • 19733

23种设计模式C++实例之外观模式

为各个不同的类提供统一的接口,然后通过外观模式将其组合起来,对外提供一个统一的接口。 #include using namespace std; /* * 外观模式:将子系统中的...
  • xufeng0991
  • xufeng0991
  • 2015年12月16日 10:25
  • 413

C++设计模式[九]外观模式

今天学习的是外观模式,其实很简单,看一下下图就知道它的作用了: 外观角色(Facade):是模式的核心,他被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订了几...
  • langb2014
  • langb2014
  • 2015年11月10日 21:48
  • 580
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++设计模式浅识外观模式
举报原因:
原因补充:

(最多只允许输入30个字)