zoukankan      html  css  js  c++  java
  • 设计模式(12)-----外观模式

    外观模式(Facade)

    定义

      模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。

    UML图

      

    例子

      方法A

    package com.csdhsm.pattemdesign.facade;
    
    /**  
     * @Title:  ServiceA.java   
     * @Description: 方法A
     * @author: Han   
     * @date:   2016年6月22日 下午8:22:33  
     */  
    public class ServiceA {
        
        public void methodA() {
            System.out.println("ServiceA === > MethodA");
        }
    }

      方法B

    package com.csdhsm.pattemdesign.facade;
    
    /**  
     * @Title:  ServiceB.java   
     * @Description: 方法B
     * @author: Han   
     * @date:   2016年6月22日 下午8:25:03  
     */  
    public class ServiceB {
        
        public void methodB() {
            System.out.println("ServiceB === > MethodB");
        }
    }

      方法C

    package com.csdhsm.pattemdesign.facade;
    
    /**  
     * @Title:  ServiceC.java   
     * @Description: 方法C
     * @author: Han   
     * @date:   2016年6月22日 下午8:25:29  
     */  
    public class ServiceC {
        
        public void methodC() {
            System.out.println("ServiceC === > MethodC");
        }
    }

      外观模式核心类

    package com.csdhsm.pattemdesign.facade;
    
    /**  
     * @Title:  Facade.java   
     * @Description: 外观模式 核心类
     * @author: Han   
     * @date:   2016年6月22日 下午8:26:09  
     */  
    public class Facade {
        
        private ServiceA a;
        private ServiceB b;
        private ServiceC c;
        
        public Facade() {
            a = new ServiceA();
            b = new ServiceB();
            c = new ServiceC();
        }
        
        //方法A
        public void methodA() {
            a.methodA();
            b.methodB();
        }
        
        //方法B
        public void methodB() {
            b.methodB();
            c.methodC();
        }
    }

      客户端

    package com.csdhsm.pattemdesign.facade;
    
    public class Solution {
        
        public static void main(String[] args) {
            Facade facade = new Facade();
            facade.methodA();
            facade.methodB();
        }
    }

      结果

      OK,成功

    总结

    在遇到以下情况使用Facade模式:
              1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
              2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
              3、当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点,如果子系统之间是相互依赖的,你可以让它们仅通过Facade 进行通讯,从而简化了它们之间的依赖关系。

  • 相关阅读:
    100——第9例
    100——第8例
    100——第7例
    POJ
    POJ
    POJ
    Egyptian Collegiate Programming Contest 2017 (ACM ECPC 2017)
    SCUT
    SCUT
    SCUT
  • 原文地址:https://www.cnblogs.com/a294098789/p/5608444.html
Copyright © 2011-2022 走看看