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

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

    外观模式通过引入一个Facade对象,提供了一个统一的接口去访问多个子系统的多个不同的接口。遮蔽了子系统的复杂性,避免了客户与子系统直接连接,减少了子系统间的连接。

    其适用性:

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

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

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

    Facade模式注重的是简化接口, 降低客户-子系统之间的耦合度,如图:

                  

    Facade模式对客户屏蔽了子系统组件,简化了子系统的使用接口,这个模式较为好理解,下面例子中Facade类中有两个service,其调用三个子系统的操作,如:

    Facade.java

     package org.designpattern.structural.facade;

         public class Facade {
         private  SubSystemA subSystemA;
         private  SubSystemB subSystemB;
         private  SubSystemC subSystemC;

         public Facade() {
            subSystemA = new SubSystemA();
            subSystemB = new SubSystemB();
            subSystemC = new SubSystemC();
         }

         public void service1(){
            subSystemA.operation();
            subSystemB.operation();
         }

         public void service2(){
            subSystemB.operation();
            subSystemC.operation();
         }
       }

     省去三个子系统的实现,下面是客户端测试类:

    package org.designpattern.structural.facade;

        public class Main {
            public static void main(String[] args){
                Facade facade = new Facade();
                facade.service1();
                System.out.println("--------------");
                facade.service2();
            }

        } 

      外观模式为一组相似功能的类群,提供一个一致的简单界面,隐蔽细节,箱底了外部和内部的耦合关系。子系统复杂时优先考虑外观模式。

  • 相关阅读:
    洛谷 P1991 无线通讯网/一本通OJ 1487【例 2】北极通讯网络
    [NOIP2016TG] 洛谷 P1850 换教室
    洛谷 P1169 [ZJOI2007]棋盘制作
    C#中数组、ArrayList和List三者的区别
    【转载】C#读写注册表
    UninstallTool(Windows软件卸载工具)--快捷、方便卸载电脑中的软件
    C#启动一个外部程序-CreateProcess
    C# 调用外部程序Process类
    学习C#,每天一话
    C#中字符串处理(随时更新)
  • 原文地址:https://www.cnblogs.com/kingcucumber/p/3221323.html
Copyright © 2011-2022 走看看