zoukankan      html  css  js  c++  java
  • 大话设计模式之外观模式

     

     

    外观模式(Facade),也叫门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 


    外观模式是一种使用频率非常高的结构型设计模式,他通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。

     

    就拿大家最喜欢吃的泡面来说(额,稍微没有出息点),我们吃泡面可以有两种选择:一是选择自己煮;二是到食堂的窗口叫阿姨煮。 如果你自己煮泡面吃呢?还需要准备开水,泡面,锅等工具,对自己好点的话加个鸡蛋,还需要去买个鸡蛋。但是如果你在食堂吃呢?你只需要跟食堂的阿姨说,你想要什么口味的泡面,加不加鸡蛋就OK了,我们只需等着面熟吃就行了。例如下面的图:

                   


    从上面的图中我们可以看出,正因为有食堂煮面的阿姨,所以减少了我们与泡面、开水和鸡蛋等直接打交道这一环节。而这些煮面的程序都由食堂的阿姨来完成。我们只要跟阿姨交打交道就行。食堂的阿姨就相当于是外观模式的外观类。它就相当于是给客户端提供了两个端口,一个比较复杂,一个比较简单。使用它的最大目的就是为了降低系统类与类之间的耦合度。


    下面是结构图:



     

     

    说明:

    Facade这个外观类为子系统提供一个共同的对外接口。

    Client客户对象通过一个外观接口读写子系统中各接口的数据资源

    SubSystem,实现子系统的功能,处理Facade对象指派的任务。

     

    外观模式的代码模型:


    1.子系统类,可以使一个类,一个功能块,系统的一个组成部分或者是一个完整的系统。

     

      class SubSystemOne
        {
            public void MethodOne()
            {
                Console.WriteLine("子系统方法一");
            }
            class SubSystemTwo
            {
                public void MethodTwo()
                {
                    Console.WriteLine("子系统方法二");
    
                }
            }


    2.外观类,将子系统的方法和属性进行了组合,以备外界调用

     

    class Facade
            {
                SubSystemOne one;
                SubSystemTwo two;     
         
                public Facade()
                {
                    one = new SubSystemOne();
                    two = new SubSystemTwo();               
                }
    
                public void MethodA()
                {
                    Console.WriteLine("\n方法组A() -----");
                    one.MethodOne();
                    two.MethodTwo();              
                }
    
                public void MehodB()
                {
                    Console.WriteLine("\n方法组B()----");
                    two.MethodTwo();               
                }
            }

    3.客户端调用,由于Facade的作用,客户端可以根本不知子系统类的存在。

     

     static void Main(string[] args)
                {
                    Facade facade = new Facade();
    
                    facade.MethodA();
                    facade.MehodB();
    
                    Console.Read();
    
                }

     

    外观模式的使用:

    1.当要为访问一系列复杂的子系统提供一个简单入口时可以使用外观模式。

    2.客户端程序与多个子系统之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。

    3.在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。

     

     


     

  • 相关阅读:
    [工具推荐]005.Axure RP Pro 7.0模拟C#TAB控件
    [安卓基础] 008.Android中的显示单位
    [JavaWeb基础] 008.Spring初步配置
    [批处理教程之Shell]002.Linux 常用命令大全
    [注]新手学习编程的最佳方式是什么?
    [C#打包部署教程]001.VS2012 + InstallShield
    [站点推荐]001.学习新技能的37个最佳网站(The 37 Best Websites To Learn Something New)
    程序员如何像写代码一样找女朋友
    [工具-006] C#如何模拟发包登录
    [Linux系统] (1)常用操作(CentOS 7.x)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/2996617.html
Copyright © 2011-2022 走看看