门面设计模式12

一、定义

        门面模式又称为外观模式,它是一种结构型模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 

        简单说,该模式把一个模块中的多个类的公共接口封装到一个“统一接口”中,而门面类拥有一个或多个这样的“统一接口”。再简单一点理解就是封装“流程”,简化调用。

        推荐三篇我认为非常非常好的博客:

        java设计模式之外观模式(门面模式)

        设计模式(七)门面模式(Facade Pattern 外观模式)

        设计模式之门面模式(八)

        

二、外观设计模式的角色

        门面角色。门面类持有子系统角色的引用,因此熟悉子系统中的所有公共接口,并能够调用它们。

        子系统角色:一个子系统类可以视为一个独立的模块,这个模块中实现了大量的业务逻辑功能。一个门面类中可以有多个子系统类。

        客户端角色:什么是客户端,我的理解就是最上层调用环境。它专门调用门面角色。


三、优缺点

        优点:

        1.降低调用环境与子系统之间的耦合,调用环境只与门面类耦合,而不与多个子系统类耦合。当需求发生变更的时候,编写新的门面类,替换掉原来的门面类。

        2.简单好用。因为门面类中封装子系统类,可以将它们的业务逻辑流程封装到一个统一方法中,调用环境只需要直接调用门面类的那个统一方法,因此简单好用

        3.在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。

        

        缺点:

        因为需求变更导致的逻辑代码变动,导致以前的门面类不能满足现在的需求,因此需要修改原来的代码,不符合开放闭合原则。解决方法是把门面类也抽象,编写新的门面类实现抽象门面类,使用修改配置文件的方法替换旧的门面类。但这样,无异于要编写读取配置文件的流操作代码,可以预见到,很可能有一个专门生成门面实现类的单例工厂,这样无异于增加了代码开发量。


四、心法

        封装交互,简化调用,降低耦合。

        层与层之间使用门面对接,封装了不同层次的交互。

        不要试图去修改门面类的代码,更不要去继承或者代理门面类。

        门面模式是负责“组合”子系统已有的功能,用于提供给现外部,满足需要,而不是添加新的实现。

        我认为不需要创建过多的门面类,只让门面类去做封装那些较为复杂的流程操作。而子系统的一些简单的功能,调用环境仍然可以直接调用,而不是画蛇添足,为了设计模式而设计模式,没必要把一两步的操作也封装到门面类中。


五、实际使用

        Spring的JdbcTemplate就用到了门面设计模式,封装了常用的增删改查操作,我们一般只需要提供SQL语句就行了。


分割线--------------------------------------------------------------------------------------------

下一篇:桥接设计模式13


        

        


        

猜你喜欢

转载自blog.csdn.net/yanluandai1985/article/details/80095921