java设计模式《外观模式》

外观模式

参考文档
http://c.biancheng.net/view/1369.html
https://www.runoob.com/w3cnote/facade-pattern-3.html


软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。
这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,
所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。

外观(Facade)模式的结构比较简单,主要是定义了一个高层接口。它包含了对各个子系统的引用,客户端可以通过它访问各个子系统的功能。现在来分析其基本结构和实现方法。
1. 模式的结构
外观(Facade)模式包含以下主要角色。
外观(Facade)角色:为多个子系统对外提供一个共同的接口。
子系统(SubSystem)角色:实现系统的部分功能,客户可以通过外观角色访问它。
客户(Client)角色:通过一个外观角色访问各个子系统的功能。

门面模式的优点
松散耦合: 门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
简单易用: 门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,
也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。

更好的划分访问层次: 通过合理使用Facade,可以帮助我们更好地划分访问的层次。
有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,
这样既方便客户端使用,也很好地隐藏了内部的细节。

demo

step 1  创建几个子系统

package java_basic.stu_design_mode.stu_Facade;
public class SubSystem1 {
    public void showMessage(){
        System.out.println("this is SubSystem1");
    }
}
package java_basic.stu_design_mode.stu_Facade;
public class SubSystem2 {
    public void handleMessage(){
        System.out.println("this is SubSystem2");
    }
}
package java_basic.stu_design_mode.stu_Facade;

public class SubSystem3 {
    public void doMessage(){
        System.out.println("this is SubSystem3");
    }
}

step 2  外观角色

package java_basic.stu_design_mode.stu_Facade;

public class Facade {
    SubSystem1 subSystem1 = new SubSystem1();
    SubSystem2 subSystem2 = new SubSystem2();
    SubSystem3 subSystem3 = new SubSystem3();

    public void handle(){//所有子系统的访问,被集中在一起
        subSystem1.showMessage();
        subSystem2.handleMessage();
        subSystem3.doMessage();
    }

}

step 3 调用

package java_basic.stu_design_mode.stu_Facade;

import org.junit.Test;

public class Main {
    @Test
    public void method() {
        Facade facade = new Facade();
        facade.handle();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值