• 设计模式学习笔记外观模式


    概述:                                                                                                      

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

    应用场合:                                                                                                

    1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子类的的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。

    2.客户端程序与抽象类的实现部分存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

    3.当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统的每层的入口点。如果子系统之间是相互依赖的,你可以让他们仅通过facade进行通讯,从而简化了他们之间的依赖关系。

    类图:                                                                                                       

    代码示例:                                                                                                 

    1.定义子系统

        class SubsystemOne
    {
    public void MethodOne()
    {
    Console.WriteLine(
    "子系统方法一");
    }
    }
    class SubsystemTwo
    {
    public void MethodTwo()
    {
    Console.WriteLine(
    "子系统方法二");
    }
    }
    class SubsystemThree
    {
    public void MethodThree()
    {
    Console.WriteLine(
    "子系统方法三");
    }
    }
    class SubsystemFour
    {
    public void MethodFour()
    {
    Console.WriteLine(
    "子系统方法四");
    }
    }

    2.定义门面

     class Facade
    {
    SubsystemOne one;
    SubsystemTwo two;
    SubsystemThree three;
    SubsystemFour four;

    public Facade()
    {
    one
    = new SubsystemOne();
    two
    = new SubsystemTwo();
    three
    = new SubsystemThree();
    four
    = new SubsystemFour();
    }
    public void MethodA()
    {
    Console.WriteLine(
    "\n 方法组A()-----");
    one.MethodOne();
    two.MethodTwo();
    four.MethodFour();
    }
    public void MethodB()
    {
    Console.WriteLine(
    "\n 方法组B()-----");

    two.MethodTwo();
    three.MethodThree();
    }
    }

    3.客户端调用

            /// <summary>
    /// 测试外观模式
    /// </summary>
    static void TestFacade()
    {
    Facade facade
    = new Facade();
    facade.MethodA();
    facade.MethodB();
    Console.Read();
    }

    小结:                                                                                                      

    外观模式其实就是把子系统的多个执行流程统一用一个方法去调用,这个方法实际操作当中用的很多,比如定义一个子程序,这儿的子程序就是执行别的多个子程序,就算是外观模式了,不限于面向对象。

  • 相关阅读:
    dataTables分页实现两个前提
    centos 7 下 nginx 1.10.3 编译安装的方法
    redis 远程连接出错的解决办法
    Yii2事件驱动的运行机制
    Yii2项目高级模版 三个模块在同一个目录下的重定向配置
    PHP处理上传文件信息数组中的文件类型 正确获取
    PHP is_writeable 存在bug , 写一个自定函数 判断文件是否可写
    PHP面试题学习
    解决yii2 禁用layout时AppAsset不加载资源的问题
    如何在 Docker 容器中运行 Kali Linux 2.0
  • 原文地址:https://www.cnblogs.com/jqbird/p/2148983.html
Copyright © 2020-2023  润新知