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 }
  • 相关阅读:
    geodatabase在sql server和Oracle上的应用
    python:AttributeError: module 'xxxx' has no attribute 'xxxxx'
    sql server复制一张表到另一张表
    pyodbc:Python使用pyodbc访问数据库操作方法
    python如何生成token
    WebGIS应用案例
    SAP UI5 里如何让每次视图显示时都执行某方法
    使用开源微前端框架 Luigi 创建一个基于微前端架构的工程
    关于 SAP 产品 UI 的搜索引擎优化 SEO
    Debug a Server–Side Rendered SAP Spartacus Storefront Using Chrome Dev Tools
  • 原文地址:https://www.cnblogs.com/huzi007/p/4045337.html
Copyright © 2011-2022 走看看