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

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

    何时使用外观模式?
          这要分三个阶段来说,首先,在设计初期阶段,应该要有意思的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。其次,在开发阶段,子系统往往因为不断的重构烟花而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用他们的用户程序带来了使用上的困难,增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须要依赖于它。此时用外观模式Facade也是非常合适的。你可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。



      子系统类集合(SubSystemOne 、SubSystemTwo、SubSystemThree、SubSystemFour):实现子系统的功能,处理Facade对象指派的任务。注意子类中没有Facade的任何信息,即没有对Facade对象的引用。

    1 //子系统类
    2 public class SubSystemOne {
    3     public void methodOne(){
    4         System.out.println("子系统方法一");
    5     }
    6 }
    1 //子系统类
    2 public class SubSystemTwo {
    3     public void methodTwo(){
    4         System.out.println("子系统方法二");
    5     }
    6 }
    1 //子系统类
    2 public class SubSystemThree {
    3     public void methodThree(){
    4         System.out.println("子系统方法三");
    5     }
    6 }
    1 //子系统类
    2 public class SubSystemFour {
    3     public void methodFour(){
    4         System.out.println("子系统方法四");
    5     }
    6 }

    外观类:

     1 //外观类
     2 /**
     3  * 外观类:知道那些子系统类负责处理请求,将客户的请求代理给适当的子系统对象
     4  * @author 贤元
     5  *
     6  */
     7 public class Facade {
     8     private SubSystemOne one;
     9     
    10     private SubSystemTwo two;
    11     private SubSystemThree three;
    12     private SubSystemFour four;
    13     
    14     //构造函数,为子系统的实例初始化
    15     public Facade(){
    16         one = new SubSystemOne();
    17         two = new SubSystemTwo();
    18         three = new SubSystemThree();
    19         four = new SubSystemFour();
    20     }
    21     
    22     //方法组A(),用于执行特定的功能A
    23     public void methodA(){
    24         System.out.println("方法组A()---");
    25         one.methodOne();
    26         two.methodTwo();
    27         four.methodFour();
    28     }
    29     
    30     //方法组B(),用于执行特定的功能B
    31     public void methodB(){
    32         System.out.println("方法组B()---");
    33         two.methodTwo();
    34         three.methodThree();
    35     }
    36 }

    客户端:

     1 //客户端
     2 public class Client {
     3     //客户端调用
     4     public static void main(String[] args) {
     5         Facade facade = new Facade();
     6         facade.methodA();
     7         facade.methodB();
     8         
     9         /**
    10          * 打印结果
    11          * 方法组A()---
    12             子系统方法一
    13             子系统方法二
    14             子系统方法四
    15             方法组B()---
    16             子系统方法二
    17             子系统方法三
    18          */
    19     }
    20 }

     UML图:

  • 相关阅读:
    Invoice Helper
    Product Helper
    Order Helper
    Case Helper
    Quote Helper
    C# 工厂模式示例
    若今生长剑浣花,生死无涯
    古代美到窒息的谎言
    C#解决微信支付Exception has been thrown by the target of an invocation(调用的目标发生了异常)的问题
    文能提笔控萝莉,转载自网上
  • 原文地址:https://www.cnblogs.com/lixianyuan-org/p/9499370.html
Copyright © 2011-2022 走看看