• 外观模式(Facade)C++实现


    外观模式

    意图:

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

    适用性:

           1、在设计初期阶段,应该要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观。

           2、在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用他们的用户程序带来了使用上的困难,用外观模式提供一个简单的接口,减少他们之间的依赖。

           3、在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须要依赖于它。此时为新系统开发一个外观类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与外观对象交互,外观对象与遗留代码交互所有复杂的工作。

    UML:

    代码实现:

    一家餐厅,如果没有服务员,那么饮料、餐具、纸巾什么的都得顾客自己去拿。

    交互如图:

    有了服务员,则顾客有什么事可以直接找服务员,这就是外观模式的体现。

    交互如图:

    代码:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class Gettableware{
     5 public:
     6     Gettableware(){}
     7     void doIt()
     8     {
     9         cout<<"拿餐具!"<<endl;
    10     }
    11 };
    12 
    13 class GetDrink{
    14 public:
    15     GetDrink(){}
    16     void doIt()
    17     {
    18         cout<<"拿饮料!"<<endl;
    19     }
    20 };
    21 
    22 class GetTissue{
    23 public:
    24     GetTissue(){}
    25     void doIt()
    26     {
    27         cout<<"拿纸巾!"<<endl;
    28     }
    29 };
    30 
    31 class Waiter{
    32 public:
    33     Waiter()
    34     {
    35         mpGettableware = new Gettableware;
    36         mpGetDrink = new GetDrink;
    37         mpGetTissue = new GetTissue;
    38     }
    39 
    40     ~Waiter()
    41     {
    42         delete mpGetTissue;
    43         delete mpGettableware;
    44         delete mpGetDrink;
    45     }
    46     void mGettableware()
    47     {
    48         mpGettableware->doIt();
    49     }
    50     void mGetDrink()
    51     {
    52         mpGetDrink->doIt();
    53     }
    54     void mGetTissue()
    55     {
    56         mpGetTissue->doIt();
    57     }
    58 public:
    59     Gettableware* mpGettableware;
    60     GetDrink* mpGetDrink;
    61     GetTissue* mpGetTissue;
    62 };
    63 
    64 class Client{
    65 public:
    66     Client()
    67     {
    68         mWaiter = new Waiter;
    69     }
    70     ~Client()
    71     {
    72         delete mWaiter;
    73     }
    74     Waiter* mWaiter;
    75 };
    76 
    77 void main()
    78 {
    79     Client client;
    80     client.mWaiter->mGettableware();
    81     client.mWaiter->mGetDrink();
    82     client.mWaiter->mGetTissue();
    83     return;
    84 }
  • 相关阅读:
    20135213 20135231 信息安全系统设计基础课程第二次实验报告
    20135213——信息安全系统设计基础第十二周学习总结
    20135213——信息安全系统设计基础第十一周学习总结
    20135220谈愈敏Blog5_系统调用(下)
    20135220谈愈敏Linux Book_5
    20135220谈愈敏Blog4_系统调用(上)
    20135220谈愈敏Linux Book_1&2
    20135220谈愈敏Blog3_构造一个简单的Linux系统MenuOS
    20135220谈愈敏Blog2_操作系统是如何工作的
    20135220谈愈敏Blog1_计算机是如何工作的
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/Facade.html
Copyright © 2020-2023  润新知