设计模式——外观模式

外观模式

定义

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

类型:结构性

使用场景

(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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值