设计模式——外观模式

Posted danfengw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——外观模式相关的知识,希望对你有一定的参考价值。

外观模式

定义

又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口
外观模式定义了一个高层接口,让子系统更容易使用

类型:结构性

使用场景

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

优缺点

优点:
简化了调用过程,无需了解深入子系统,防止带来风险
减少系统依赖,松散耦合
更好地划分访问层次
符合迪米特法则,即最少直到原则

缺点:
增加子系统,扩展子系统行为容易引入风险
不符合开闭原则

Demo

demo也是参考的大话设计模式,在外观模式中需要多个子系统+一个Facade类,用户不需要知道内部行为,所有行为都是通过Facade类进行。

public class SubsystemOne 
    public void methodOne()
        System.out.println("子系统方法一");
    

public class SubsystemTwo 
    public void methodTwo()
        System.out.println("子系统方法二");
    

public class SubsystemThree 
    public void methodThree()
        System.out.println("子系统方法三");
    

public class SubsystemFour 
    public void methodFour()
        System.out.println("子系统方法四");
    

public class Facade 
    SubsystemOne one;
    SubsystemTwo two;
    SubsystemThree three;
    SubsystemFour four;

    public Facade()
        one=new SubsystemOne();
        two=new SubsystemTwo();
        three=new SubsystemThree();
        four=new SubsystemFour();
    

    public void methodA()
        one.methodOne();
        two.methodTwo();
        four.methodFour();
    

    public void methodB()
        two.methodTwo();
        four.methodFour();
    

调用

public class Test 
    public static void main(String[] args) 
        Facade facade=new Facade();
        facade.methodA();
        facade.methodB();
    

以上是关于设计模式——外观模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式——外观模式

设计模式外观模式

设计模式之外观模式

Facade——外观模式

设计模式:外观(Facade)模式

第18课:生活中的外观模式——学妹别慌,学长帮你