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

概述

想想我们小时候玩的四驱车,里面的构造很复杂,马达,舵机,电池组等等,而我们控制它却非常简单,只 要打开电池开关,他就可以跑。我们其实不用知道它里面是如何工作,只要知道拨动开关它就可以工作就行了,这个开关其 实就四驱车给我们的一个友好的组件,使得我们可以很方便的控制它。

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

类图和样例

在这个对象图中,出现了两个 角色:

外观(Facade)角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责 任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。

子系统(subsystem)角色:可以同 时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用 ,或者被外观角色调用。子系统并不知道外观的存在,对于子系统而言,外观仅仅是另外一个客户端而已。

#include<iostream>
using namespace std;
class Scanner
{
public:
    void Scan() { cout<<"词法分析"<<endl; }
};
class Parser
{
public:
    void Parse() { cout<<"语法分析"<<endl; }
};
class GenMidCode
{
public:
    void GenCode() { cout<<"产生中间代码"<<endl; }
};
class GenMachineCode
{
public:
    void GenCode() { cout<<"产生机器码"<<endl;}
};
//高层接口  Fecade
class Compiler
{
public:
    void Run()
    {
        Scanner scanner;
        Parser parser;
        GenMidCode genMidCode;
        GenMachineCode genMacCode;
        scanner.Scan();
        parser.Parse();
        genMidCode.GenCode();
        genMacCode.GenCode();
    }
};    

//client
int main()
{
    Compiler compiler;
    compiler.Run();
    return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索客户端
, 角色
, 一个
, 外观模式
, 子系统
或者
设计模式c 实现、c语言实现设计模式、外观设计模式、外观设计模式案例、c 外观模式,以便于您获取更多的相关知识。

时间: 2024-12-23 22:21:03

设计模式的C++实现之外观模式的相关文章

.NET设计模式(12):外观模式

概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化.那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Faç ;ade 模式. 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.[GOF <设计模式>] 示意图 门面模式没有一个一般化的类图描述,下面是一个示意性的对象图: 图1 Faç ;ade模式示意性对象图

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

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

设计模式学习笔记(一) Facade外观模式

GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易使用. 大致意思是说:使用一种比原有方式更简单的办法与系统交互.例如,我们把一个很文件的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件. 我就上面说的那个情形写一下实现代码,首先我们要实现二个子系统,呵呵,把抽屉比喻

.NET设计模式-外观模式(Façade Pattern)

外观模式(Façade Pattern) --.NET设计模式系列之十二 Terrylee,2006年3月 概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化.那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式. 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.[GOF <设计模式>] 示意

PHP设计模式之外观模式

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

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

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

hand first设计模式 -外观模式

外观模式:提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用. Java代码 public class Light{ private String name; public Light(String name){ this.name = name; } public void on(){ System.out.println(name +" is on"); } public void off(){ System.out.println(nam

解读设计模式----外观模式(Facade Pattern)

一.模式简介 外观模式(Facade Pattern)可以将一系列复杂的类包装成一个简单的封闭接口.也称门面模式. 二.模式意图 每一种设计模式都有它的意图,我们看看设计模式的祖师们是怎么说的.按照GOF的说法,Facade模式的意图是:为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 三.模式UML(下图转自http://www.dofactory.com/) 四.模式参与者 门面(Facade)角色:客户端可以调用这个角色的方

深入理解JavaScript系列(30):设计模式之外观模式详解

 这篇文章主要介绍了深入理解JavaScript系列(30):设计模式之外观模式详解,外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模块定义了一个高层接口,这个接口值得这一子系统更加容易使用,需要的朋友可以参考下     介绍 外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模块定义了一个高层接口,这个接口值得这一子系统更加容易使用. 正文 外观模式不仅简化类中的接口,而且对接口与调用者也进行了解耦.外观模式经常被认为开发者必备,它可以将一些复杂操作封装