一,什么是外观模式?

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

二,我们看看代码的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _10.外观模式
{
class Program
{
static void Main(string[] args)
{
//不存在外观类是我们的调用方法是这样的,如下代码;
//People p = new People("中国人");
//Event e = new Event();
//Console.Write(p.people);
//e.Say(); //外观系统,跟以上代码比较,我们可以知道:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。而不用实例过多,同时也降低了客户端和子系统之间的紧耦合,如People和Event的实例都不在Program中了
Facade fa = new Facade("中国人");
fa.WhoEvent(); Facade fa1 = new Facade("美国人");
fa1.WhoEvent();
Console.Read();
}
}
/// <summary>
/// 外观类
/// </summary>
public class Facade
{
private Event ev { get; set; }
private People pe { get; set; } public Facade(string people)
{
ev = new Event();
pe = new People(people);
}
public void WhoEvent()
{
Console.Write(pe.people);
ev.Say();
ev.Eat();
}
}
/// <summary>
/// 相当于行为子系统
/// </summary>
public class Event
{
public void Say()
{
Console.Write("说话和");
}
public void Eat()
{
Console.WriteLine("吃饭");
}
}
/// <summary>
/// 相当于人子系统
/// </summary>
public class People
{
public string people { get; set; }
public People(string p)
{
this.people = p;
}
}
}

三,在上面代码中,我们的代码结构是:客户端--》Facade--》n个子系统(People和Event等)

1》在外观模式中我们,完全将子系统的实例放到外观里面,这里我们可以将提供了一个一直的界面,客户端可以直接通过外观类来调用内部子系统中方法,而避免了耦合

四,那外观模式和适配器模式有什么区别呢?

适配器:Adapter适配器模式是将两个不兼容的类组合在一起使用

外观模式:为子系统中的一组接口提供一个一致的界面

根据以上两个解释我们可以知道:

1》适配器是针对单个对象,而外观模式是针对多个对象(子系统)的

2》适配器是对单个对象的接口适配,从而实现现有了类可以适配当前系统的结果

3》而外观模式则是将多个子系统的接口包装起来,实现降低耦合和共同调用,和适配器模式的意图是不一样的

C#设计模式:外观模式(Facade Pattern)的更多相关文章

  1. C#设计模式——外观模式(Facade Pattern)

    一.概述 在系统设计中,某一个系统可能非常庞大,用户要使用该系统就不得不掌握大量的接口,造成使用的不便.这时可以考虑将该系统细分成一系列子系统并使子系统间的耦合降到最低,利用外观模式提供一个外观对象, ...

  2. 乐在其中设计模式(C#) - 外观模式(Facade Pattern)

    原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...

  3. 设计模式系列之外观模式(Facade Pattern)——提供统一的入口

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  4. 二十四种设计模式:外观模式(Facade Pattern)

    外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...

  5. 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  6. 设计模式-外观模式(Facade)

    简介 外观模式(Facade),将外部与内部子系统的通信通过一个统一的门面对象进行. 由两部分组成: 门面角色:供外部调用,内部可能组装了多个子系统,多个方法. 子系统角色:子系统的方法也可以直接供外 ...

  7. 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)

    在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...

  8. python : 设计模式之外观模式(Facade Pattern)

    #为啥要用外观模式举例说明 这个例子很形象,直接从人家博客上贴过来的,参考链接在下面 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶.茶具和开水,如图1(A)所示,而 ...

  9. 【UE4 设计模式】外观模式 Facade Pattern

    概述 描述 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.外观模式又称为门面模式,它是一 ...

  10. 外观模式Facade pattern

    http://www.runoob.com/design-pattern/facade-pattern.html 外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一 ...

随机推荐

  1. postman基础

    Postman使用场景: 开发接口的时候需要快速的调用接口,以便调试 测试的时候需要非常方便的调用接口,通过不同的参数去测试接口的输出 这些接口调用是需要保存下来的反复运行的 在运行过程中如果有断言( ...

  2. C#(.net)实现用apache activemq传递SQLite的数据

    版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处:http://www.cnblogs.com/2186009311CFF/p/6382623.html. C#(.net)实现用apache ...

  3. Mac升级系统后 Pod Install报错-不能用 解决办法

    brew reinstall cocoapods brew install ruby brew link --overwrite cocoapods 最近将Mac OS升级到10.15.1 ,再回来初 ...

  4. rk3288-cc上编写一个hello world

    一.编写一个hello world驱动 懒,不写了 二.编写Kconfig和Makefile 我们在kernel/driver目录下创建一个hello目录 然后创建一个Kconfig文件: confi ...

  5. Maven的settings.xml配置详解

    子节点详细介绍转载:http://www.cnblogs.com/jingmoxukong/p/6050172.html?utm_source=gold_browser_extension 全局配置 ...

  6. 给字体和元素加阴影text-shadow和box-shadow

    1.语法:  对象选择器 {text-shadow:X轴偏移量 Y轴偏移量 阴影模糊半径 阴影颜色} 注:text-shadow可以使用一个或多个投影,如果使用多个投影时必须需要用逗号“,”分开. 2 ...

  7. 获取浏览区变化的方法resize() 方法

    当调整浏览器窗口的大小时,发生 resize 事件. resize() 方法触发 resize 事件,或规定当发生 resize 事件时运行的函数. <html> <head> ...

  8. [CSP-S模拟测试]:小P的2048(模拟)

    题目描述 最近,小$P$迷上了一款叫做$2048$的游戏.这块游戏在一个$n\times n$的棋盘中进行,棋盘的每个格子中可能有一个形如$2^k(k\in N^*)$的数,也可能是空的.游戏规则介绍 ...

  9. [CSP-S模拟测试]:超级树(DP)

    题目传送门(内部题5) 输入格式 一行两个整数$k$.$mod$,意义见上. 输出格式 一行一个整数,代表答案. 样例 样例输入1: 2 100 样例输出1: 样例输入2: 3 1000 样例输出2: ...

  10. 个推安卓推送SDK集成步骤详解

    以下是一位开发者在集成个推安卓推送SDK时候的亲身经历: 作者:吃饱了想睡. 概述 公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个 ...