第10章 外观模式(Fa?ade Pattern)

原文   第10章 外观模式(Fa?ade Pattern)

概述:

 

在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Fa?ade 模式。

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF 《设计模式》]

结构图:

这里在附上一个有助于理解的图

未使用外观模式

使用外观模式后

外观模式在我们的开发中其实用的非常的多,随处可见,我这里就随便举个例子(可能不是很恰当,但是一看基本就懂了)





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

    /// <summary>

    /// 方法一

    /// </summary>

    public  class Method1

    {

        public void GetMsg()

        {

            Console.WriteLine("男的");

         }

    }

    /// <summary>

    /// 方法二 

    /// </summary>

    public class Method2

    {

        public void GetMsg()

        {

            Console.WriteLine("女的");

        }

    }

客户端调用,男的调用方法一,女的调用方法二(好吧这个是个公厕入口)





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

    class Program

    {

        static void Main(string[] args)

        {

           //平常的方法

            string sex = "男";

            

            if (sex == "男")

            {

                Method1 m = new Method1();

                m.GetMsg();

            }

            else if (sex == "女")

            {

                Method2 m = new Method2();

                m.GetMsg();

            }

            Console.ReadLine();

        }

    }

这样做是合理的,但是我们在调用的时候希望更简单,不需要这么多的逻辑判断,你给一个接口给我,我把参数传进去,就完事了。好,我们用外观来实现这种效果。





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

    /// <summary>

    /// 外观场景

    /// </summary>

    public class Facade

    {

        public void GetMsg(string sex)

        {

            if (sex == "男")

            {

                Method1 m = new Method1();

                m.GetMsg();

            }

            else if (sex == "女")

            {

                Method2 m = new Method2();

                m.GetMsg();

            }

          

        }

    }

    /// <summary>

    /// 方法一

    /// </summary>

    public class Method1

    {

        public void GetMsg()

        {

            Console.WriteLine("男的");

        }

    }

    /// <summary>

    /// 方法二 

    /// </summary>

    public class Method2

    {

        public void GetMsg()

        {

            Console.WriteLine("女的");

        }

    }

客户端调用





1

2

3

4

5

6

7

8

9

10

11

12

    class Program

    {

        static void Main(string[] args)

        {

            //平常的方法

            string sex = "男";

            Facade facde = new Facade();

            facde.GetMsg(sex);

            Console.ReadLine();

        }

    }

使用外观模式之后,是不是感觉调用起来非常的简介。相信这个模式大家都会用!

适用性:

1.为一个复杂子系统提供一个简单接口。

2.提高子系统的独立性。

3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

总结:

 

Fa?ade模式注重的是简化接口,它更多的时候是从架构的层次去看整个系统,而并非单个类的层次。

从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果----内部子系统的任何变化不会影响到Facade接口的变化

设计模式系列文章http://www.diyibk.com/post/39.html

时间: 2024-10-11 02:56:24

第10章 外观模式(Fa?ade Pattern)的相关文章

第12章 代理模式(Proxy Pattern)

原文   第12章 代理模式(Proxy Pattern) 代理模式 概述: 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切.这就是本文要说的Proxy模式. 结构图:     举例:       代练游戏,玩游戏,自己不想花时间去升级.委托给代练. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

第 14 章 迭代器模式【Iterator Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 周五下午,我正在看技术网站,第六感官发觉有人在身后,扭头一看,我C,老大站在背后,赶忙站起来, “王经理,你找我?” 我说. “哦,在看技术呀.有个事情找你谈一下,你到我办公室来一下.” 老大说. 到老大办公室, “是这样,刚刚我在看季报,我们每个项目的支出费用都很高,项目情况复杂,人员情况也不简单,我看着 也有点糊涂,你看,这是我们现在还在开发或者维护的103 个项目,你能不能先把这些项目信息重新打印一份 给我,咱们好查查到

第20章 状态模式(State Pattern)

原文 第20章 状态模式(State Pattern) 状态模式  概述:   当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化. 意图:   允许一个对象在其内部状态改变时改变它的行为 结构图:                 举例:                      在日常生活中最为熟悉的点灯开关,按一下开灯,在按一下关

第23章 访问者模式(Visitor Pattern)

原文 第23章 访问者模式(Visitor Pattern) 访问者模式 导读:访问者模式是我个人认为所有行为模式中最为复杂的一种模式了,这个模式可能看一遍会看不懂,我也翻了好几个例子,依然不能很好的理解访问者模式的核心.下面这个例子是来源于大话设计模式中的例子,稍作了修改!后续如果我有更好的例子或者想法我会对本章进行完善. 概述:   一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作(神一般的语言). 结构图:       举例: 1 2 3

第9章 组合模式(Composite Pattern)

原文 第9章 组合模式(Composite Pattern) 概述: 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦. 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite模式使得用户对单个对象和组合对象的使用具有一致性.[GOF <设计模式>] 结构图: 举例: 假设我们公司有做个打卡的程序,能满足各种打卡的需要,比如整个

第4章 建造者模式(Builder Pattern)

原文 第4章 建造者模式(Builder Pattern) 定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 实用范围 1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2 当构造过程必须允许被构造的对象有不同表示时. 角色 在这样的设计模式中,有以下几个角色: 1 builder:为创建一个产品对象的各个部件指定抽象接口. 2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部

第18章 备忘录模式(Memento Pattern)

原文  第18章 备忘录模式(Memento Pattern) 备忘录模式       概述: 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 定义(源于GoF<设计模式>):在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 结构图:        代码举例: 1 2 3 4 5 6 7 8 9 10 11 12 13

第14章 命令模式(Command Pattern)

原文 第14章 命令模式(Command Pattern) 命令模式(Command Pattern) 概述   在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务"等处理,这种无法抵御变化的紧耦合是不合适的.在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合[李建

第21章 策略模式(Strategy Pattern)

原文 第21章 策略模式(Strategy Pattern) 策略模式 导读:策略模式看完之后,大多数人都会感觉有点混了,包括我,感觉策略模式是一种OO思想的体现(纯属个人拙见). 概述:   策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 抽象策略角色: 策略类,通常由一个接口或者抽象类实现. 具体策略角色:包装了相关的算法和行为. 环境角色:持有一个策略类的引用,最终给客户端调用. 结构图: