17.外观模式



1外观模式的核心内容是:

A:多个子系统的类

B:通过一个统一的门面进行管理

2外观模式的作用:让各各子类的运行由一个类统一进行管理。

3外观模式具体描述

门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。

门面模式提供一个高层次的接口,使得子系统更易于使用。

每一个子系统只有一个门面类,而且此门面类只有一个实例,

也就是说它是一个单例模式。但整个系统可以有多个门面类。

 

我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,

这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。

幸好相机有Facade设计模式,把相机调整到自动档,

只要对准目标按快门就行了,一切由相机自动调整,

这样MM也可以用这个相机给我拍张照片了。

4外观模式类图

5.代码:

#include<iostream>

#include
<string>

using
namespace
std;

//门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。

//门面模式提供一个高层次的接口,使得子系统更易于使用。

//每一个子系统只有一个门面类,而且此门面类只有一个实例,

//也就是说它是一个单例模式。但整个系统可以有多个门面类。

 

//我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,

//这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。

//幸好相机有Facade设计模式,把相机调整到自动档,

//只要对准目标按快门就行了,一切由相机自动调整,

//这样MM也可以用这个相机给我拍张照片了。

class
Sub1

{

public:

   
void
f1()

   
{

       
cout <<
"子系统的方法 1"
<< endl;

   
}

};

 

class
Sub2

{

public:

   
void
f2()

   
{

       
cout <<
"子系统的方法 2"
<< endl;

   
}

};

 

class
Sub3

{

public:

   
void
f3()

   
{

       
cout <<
"子系统的方法 3"
<< endl;

   
}

};

 

class
Facade

{

private:

   
Sub1 *s1;

   
Sub2 *s2;

   
Sub3 *s3;

public:

   
Facade()

   
{

       
s1 =
new
Sub1();

       
s2 =
new
Sub2();

       
s3 =
new
Sub3();

   
}

   
void
method()

   
{

       
s1->f1();

       
s2->f2();

       
s3->f3();

   
}

};

 

int
main()

{

   
Facade *f
= new
Facade();

   
f->method();

   
cin.get();

   
return 0;

}

运行结果如下:

时间: 2024-10-07 16:24:50

17.外观模式的相关文章

Web中的积累:外观模式 Facade

壹 前言 目测好久没写文章了,距离上一篇文章也有二十多天.我是怎么了?哈哈~,两个字:生命.生命似乎说大了,那健康吧.吃一堑长一智吧 思考对生活 对生命 我的信仰?佛教?基督?-当你生病了,有药吃.比如感冒了感冒药你会觉得药难吃.人吗就是那样,但当你想到了,你生病了没药可吃是多么无奈.比如我 胸闷 胸疼.随之而来的是蹦波劳累,上海-温州-家里台州,各处跑.看病,啥?无病?no 那时候的自己想起乘车就怕,四肢无力.简直是注意力,精神都没了.看代码?看着java 想着是啥我都忘了.   后来医生药倒

[Head First设计模式]生活中学设计模式——外观模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 [Head First设计模式]抢票中的设计模式--代理模式 [Head First设计模式]面向对象的3特征5原则 [Head First设计模式]鸭子

第10章 外观模式(Fa&amp;#231;ade Pattern)

原文   第10章 外观模式(Façade Pattern) 概述:      在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化.那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式.     为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.[GOF <设计模式>]   结构图:   这里在附上一个有助

PHP设计模式之外观模式

外观设计模式的目标是: 控制外部错综复杂的关系, 并且提供简单的接口以利用上述组件的能力. 为了隐藏复杂的,执行业务进程某个步骤所需的方法和逻辑组,就应当使用基于外观设计模式的类. <?php        /**        * 代码示例: 获取CD对象,对其所有属性应用大写形式,并且创建一个要提交给Web服务的,格式完整的XML文档.        */        class CD {                        public $tracks = array();  

php设计模式 Facade(外观模式)

复制代码 代码如下: <?php /** * 外观模式 示例 * * 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得这一子系统更加的容易使用 */ class SubSytem1 { public function Method1() { echo "subsystem1 method1<br/>"; } } class SubSytem2 { public function Method2() { echo "subsystem2 meth

Java中的外观模式

外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的 接口,是设计模式中一种比较简单的设计思想,但是,也是最常用的一种设计模式. 举例: 当 你想吃橘子的时候,你需要做那几件事呢? 1:去买橘子 2:剥橘子 3:吃橘子 这样去一步一步的调用各个方法是不是觉得很麻烦呢?所以,我们需要做的工作就是简化这些步骤,把它封装 在一个方法中实现. 实现: 下面给出实现代码的UML图.

传统设计模式(七)适配器模式(附外观模式)

记得以前章节谈过的装饰者模式,我们将对象包装起来,赋予他们新的职责.而现在则是以不同目的,包装某些对象:让他们的接口看起来不像自己而像是别的东西.这样就可以在设计中,将类的接口转换成想要的接口,以便实现不同的接口. 在项目中,适配器模式一般扮演者协调者的作用. 1.客户通过目标接口调用适配器的方法对适配器发出请求 2.适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口 3.客户接受到调用的结果,但并未察觉这一切是适配器在起转换作用 另外还有一种特殊情况,万一系统新旧并存,旧的部分期望

设计模式之旅-第二天 外观模式

一. 现实问题 在.NET中使用ADO.NET来访问数据库.在读取数据时需要使用不同的数据提供程序的连接对象.命令 对象.适配器对象.数据容器对象,客户端显示数据时如果需要频繁的与这些对象进行交互无疑增加了 系统的复杂性,而且也不利于维护,试想如果需要从SQL Server数据库切换至Oracle,则需要修改每一 处数据读取的代码. 二. 解决方案 为数据读取操作创建一个"外观",该外观隐藏了底层数据访问的细节,客户端通过该外 观读取需要的数据. 与之相似的一个问题是Web页面上经常需

设计模式的C++实现之外观模式

概述 想想我们小时候玩的四驱车,里面的构造很复杂,马达,舵机,电池组等等,而我们控制它却非常简单,只 要打开电池开关,他就可以跑.我们其实不用知道它里面是如何工作,只要知道拨动开关它就可以工作就行了,这个开关其 实就四驱车给我们的一个友好的组件,使得我们可以很方便的控制它. 外观模式其实定义了一个高层接口,该接口 为子系统中的一组接口提供一个一致的界面,使得这一子系统更加容易使用. 类图和样例 在这个对象图中,出现了两个 角色: 外观(Facade)角色:客户端可以调用这个角色的方法.此角色知晓