通过C++程序示例理解设计模式中的外观模式_C 语言

举一个生活中的小例子,大凡开过学或者毕过业的都会体会到这样一种郁闷:你要去 n个地方办理 n 个手续(现在大学合并后就更加麻烦,因为可能那 n 个地方都隔的比较远)。

但是实际上我们需要的就是一个最后一道手续的证明而已,对于前面的手续是怎么办的、到什么地方去办理我们都不感兴趣。

实际上在软件系统开发中也经常回会遇到这样的情况,可能你实现了一些接口(模块),而这些接口(模块)都分布在几个类中(比如 A 和 B、C、D):A 中实现了一些接口,B 中实现一些接口(或者 A 代表一个独立模块,B、C、D 代表另一些独立模块)。然后你的客户程序员(使用你设计的开发人员)只有很少的要知道你的不同接口到底是在那个类中实现的,绝大多数只是想简单的组合你的 A-D 的类的接口,他并不想知道这些接口在哪里实现的。

这里的客户程序员就是上面生活中想办理手续的郁闷的人!在现实生活中我们可能可以很快想到找一个人代理所有的事情就可以解决你的问题(你只要维护和他的简单的一个接口而已了!),在软件系统设计开发中我们可以通过一个叫做 Facade 的模式来解决上面的问题。

我们通过外观模式解决上面的问题,其典型的结构图为:

外观模式的想法、思路和实现都非常简单,但是其思想却是非常有意义的。并且外观设计模式在实际的开发设计中也是应用最广、最多的模式之一。

应用示例:
     假如你想吃一顿大餐,那么我想你要,首先去买菜,然后回到家后自己做菜,最后吃完饭以后要洗碗打扫。
     这么一来你需要3个类,Shopper, Cook, Dishwasher, 分别来完成买菜,做菜,洗碗等工作,显然这非常麻烦,能不能简化这个过程?当然可以!去餐馆吃。
     餐馆这时候显然就是外观模式了,他把复杂的过程封装到内部,用户不用关心细节。

实现代码:
Shopper 采购类

class Shopper
{
public:
 void shopForGroceries()
 {
  cout<<"买菜"<<endl;
 } 

}; 

Cook 厨师类

class Cook
{
public:
 void doCook()
 {
  cout<<"做饭"<<endl;
 } 

}; 

洗碗工类 Dishwasher

class Dishwasher
{
public:
 void washDish()
 {
  cout<<"洗碗"<<endl;
 }
}; 

餐馆类

class Restaurant
{
public:
 Restaurant()
 { 

 }
 void haveAMeal()
 {
  m_shopper.shopForGroceries();
  m_cook.doCook();
  m_washer.washDish();
 }
private:
 Shopper m_shopper;
 Cook m_cook;
 Dishwasher m_washer;
}; 

客户端:

Restaurant rt;
rt.haveAMeal();

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 设计模式
外观模式
外观设计专利示例、外观设计专利申请示例、python胶水语言 示例、r语言shiny包 示例、汇编语言示例,以便于您获取更多的相关知识。

时间: 2024-10-31 16:18:13

通过C++程序示例理解设计模式中的外观模式_C 语言的相关文章

C++设计模式之外观模式_C 语言

前言 在实际开发时,面对一个大的系统,总是会将一个大的系统分成若干个子系统,等子系统完成之后,再分别调用对应的子系统来完成对应的整体功能,这样有利于降低系统的复杂性:最终进行实现某个具体的功能时,我们将对应的子系统进行组合就好了:但是,子系统那么多,关系那么复杂,组合形成一个完整的系统,是存在难度的. 我们在使用visual studio进行编译C++代码时,你只是在菜单中选择了Build,然后visual studio就开始了一堆的编译工作:你应该知道,因为你的一个简单的Build动作,编译器

C++设计模式之工厂方法模式_C 语言

问题描述 之前讲到了C++设计模式--简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA.ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品:那么,首先是不是需要在产品枚举类型中添加新的产品类型标识,然后,修改Factory类中的switch结构代码.是的,这种对代码的修改,对原有代码的改动量较大,易产生编码上的错误(虽然很简单,如果工程大了,出错也是在所难免的!!!).这种对代码的修改是最原始,最野蛮的修改,本质上不能称之为对代码的扩

实例解析设计模式中的外观模式在iOS App开发中的运用_IOS

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义 一个高层接口,这个接口使得这一子系统更加容易使用. 下面给大家展示一下类的结构图,想必大家一看就明白了: 其实这个模式中,没有类与类之间的继承关系,只是进行了简单的类引用,统一了对外的接口而已.看起来是不是很简单?废话不多说了,下面简单向大家展示一下代码吧! 注意:本文所有代码均在ARC环境下编译通过. SubSystemOne类接口 复制代码 代码如下: #import <Foundation/Foundation.

C++获得其他程序窗体控件中信息的方法_C 语言

本文实例讲述了C++获得其他程序窗体控件中信息的方法.分享给大家供大家参考.具体分析如下: 这里演示了获得其他程序窗体控件信息的方法, 用FindWindow API找到文本框句柄,用SendMessage(WM_GETTEXT)获得文本 #include <windows.h> BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrev

C++设计模式之中介者模式_C 语言

前言 我们都知道,这个国际政治是一门很深的学问,不玩政治的人是搞不懂的.那么多的国家,国家之间的关系又及其复杂:就好比现在,美国和中国有经济利益关系,美国又和日本有盟友关系,朝鲜又和中国有说不清道不明的关系:这些复杂的关系,稍微处理不好,就可能引发局部战争,更有可能引发第三次世界大战.如果出现了国与国之间出现了利益纠纷,那么该怎么办呢?这个时候,联合国出现了.联合国就是一个处理国与国之间纠纷的中介者. 中介者模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用

C# 设计模式系列教程-外观模式_C#教程

1. 概述 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 2. 模式中的角色 2.1 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象. 2.2 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务. 3. 模式解读 3.1 外观模式的类图 3.2 外观模式的代码实现 /// <summary> /// 子系统中的一个类 /// <

C++设计模式之抽象工厂模式_C 语言

问题描述 之前讲到了C++设计模式--工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理:由于工厂方法模式创建的对象都是继承于Product的,所以工厂方法模式中,每个工厂只能创建单一种类的产品,当需要生产一种全新的产品(不继承自Product)时,发现工厂方法是心有余而力不足. 举个例子来说:一个显示器电路板厂商,旗下的显示器电路板种类有非液晶的和液晶的:这个时候,厂商建造两个工厂,工厂A负责生产非液晶显示器电路板,工厂B负责生产

深度理解c++中的this指针_C 语言

1.this指针,就是一个指向当前对象的指针.我们知道,定义出一个类,它在内存中是不占空间的,只有定义了该类类型的对象时,系统就会为该对象分配一段存储空间,这段空间里只存储成员变量,对于成员函数,是存放在代码区的.(复习:内存分为5大区:静态区.常量区.栈.堆.代码区).下边给出一个日期类,通过这个实例,深度理解this指针. #define _CRT_SECURE_NO_WARNINGS 1 #include using namespace std; class Date { public:

C++设计模式之享元模式_C 语言

前言 无聊的时候,也去QQ游戏大厅玩五子棋或者象棋:作为程序员,看到一个产品,总要去想想它是怎么设计的,怎么完成的,我想这个是所有程序员都会做的事情吧(强迫症???).有的时候,想完了,还要做一个DEMO出来,才能体现自己的NB,然后还有点小成就感. 在玩五子棋或象棋的时候,我就想过,腾讯那帮伙计是怎么做的呢?五子棋的棋子有黑白两色,难道每次放一个棋子就new一个对象么?象棋有车.马.相.士.帅.炮和兵,是不是每盘棋都要把所有的棋子都new出来呢?如果真的是每一个棋子都new一个,那么再加上那么