zoukankan      html  css  js  c++  java
  • java设计模式--结构型模式--外观模式

     1                                             外观模式
     2  概述
     3     为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
     4  
     5  
     6  适用性
     7     1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越
     8       复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容
     9       易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。
    10       Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需
    11       要更多的可定制性的用户可以越过facade层。
    12 
    13     2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade将这个子系统与客
    14       户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
    15 
    16     3.当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。
    17       如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们
    18       之间的依赖关系。
    19  
    20  
    21  参与者
    22     1.Facade
    23       知道哪些子系统类负责处理请求。
    24       将客户的请求代理给适当的子系统对象。
    25 
    26     2.Subsystemclasses
    27       实现子系统的功能。
    28       处理由Facade对象指派的任务。
    29       没有facade的任何相关信息;即没有指向facade的指针。

    测试类:

     1 public class Test {
     2     
     3     public static void main(String[] args) {
     4         ServiceA sa = new ServiceAImpl();
     5         ServiceB sb = new ServiceBImpl();
     6         
     7         sa.methodA();
     8         sb.methodB();
     9         
    10         System.out.println("========");
    11         //facade
    12         Facade facade = new Facade();
    13         facade.methodA();
    14         facade.methodB();
    15     }
    16 }
    1 public interface ServiceA {
    2     public void methodA();
    3 }
    1 public class ServiceAImpl implements ServiceA {
    2 
    3     public void methodA() {
    4         System.out.println("这是服务A");
    5     }
    6 }
    1 public interface ServiceB {
    2     public void methodB();
    3 }
    1 public class ServiceBImpl implements ServiceB {
    2 
    3     public void methodB() {
    4         System.out.println("这是服务B");
    5     }
    6 }
    1 public interface ServiceC {
    2     public void methodC();
    3 }
    1 public class ServiceCImpl implements ServiceC {
    2 
    3     public void methodC() {
    4         System.out.println("这是服务C");
    5     }
    6 }
     1 public class Facade {
     2 
     3     ServiceA sa;
     4     
     5     ServiceB sb;
     6     
     7     ServiceC sc;
     8     
     9     public Facade() {
    10         sa = new ServiceAImpl();
    11         sb = new ServiceBImpl();
    12         sc = new ServiceCImpl(); 
    13     }
    14     
    15     public void methodA() {
    16         sa.methodA();
    17         sb.methodB();
    18     }
    19     
    20     public void methodB() {
    21         sb.methodB();
    22         sc.methodC();
    23     }
    24     
    25     public void methodC() {
    26         sc.methodC();
    27         sa.methodA();
    28     }
    29 }
  • 相关阅读:
    动态图片 Movie android-gif-drawable GifView
    X5SDK 腾讯浏览器内核
    AS 自动生成选择器 SelectorChapek
    Genymotion 模拟器 VirtualBox
    360加固保 安全防护 多渠道打包
    Thread 如何安全结束一个线程 MD
    面试题 HashMap 数据结构 实现原理
    nGrinder3.4 性能测试框架安装
    java内存泄漏的定位与分析
    JVM总结-内存监视手段及各区域内存溢出解决
  • 原文地址:https://www.cnblogs.com/huzi007/p/4045337.html
Copyright © 2011-2022 走看看