设计模式10_门面模式

          本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/52050069

1、定义

          门面模式是对象的结构模式,它提供一个高层次的接口,使得子系统更易于使用。


2、说明

          对于web系统或app而言,其中包含各种不同的业务方法,以提供不同的服务,而不同业务之间可能会彼此进行调用。这样,可能会在一个业务方法中注入多个其它的业务方法,一旦新增的业务与之相关就会对其注入新的业务方法,显然,各种业务方法耦合在一起了。

          针对上述情况,如果使用门面模式,将所有的业务方法都注入到门面类中,而某一个业务方法要使用其它业务方法,只需要注入门面类即可。这样就将各种不同的业务方法独立开来,互不耦合。

          通常情况下,门面模式的使用场景大致有:(1)为复杂的模块、子系统提供外界访问的模块。(2)子系统相对独立。(3)在层次化结构中,可以使用外观模式定义系统中每一层的入口。


3、角色

          子系统角色:实现各个子系统的功能。门面角色和客户角色对其是透明的,它没有任何的信息和链接。

          门面角色:门面模式的核心。它被客户角色调用,其熟悉子系统的功能,且其内部根据客户角色的各种需求提供了不同的方法。

          客户角色:调用门面角色来实现所需的功能。


4、类图

这里写图片描述


5、示例

          子模块01:起床

package headfirst.design.facade;

public class SubjectA {
    public void getUp() {
        System.err.println("起床。。。");
    }
}

          子模块02:洗漱

package headfirst.design.facade;

public class SubjectB {

    public void washing() {
        System.err.println("洗漱。。。");
    }
}

          子模块03:吃饭

package headfirst.design.facade;

public class SubjectC {
    public void eating() {
        System.err.println("吃饭。。。");
    }
}

          子模块04:上班

package headfirst.design.facade;

public class SubjectD {
    public void working() {
        System.err.println("上班。。。");
    }
}

          门面类:

package headfirst.design.facade;

public class Facade {

    public void test(){
        testA();
        testB();
        testC();
        testD();
    }

    public void testA() {
        SubjectA subjectA = new SubjectA();
        subjectA.getUp();
    }

    public void testB() {
        SubjectB subjectB = new SubjectB();
        subjectB.washing();
    }

    public void testC() {
        SubjectC subjectC = new SubjectC();
        subjectC.eating();
    }

    public void testD() {
        SubjectD subjectD = new SubjectD();
        subjectD.working();
    }

}

          测试:

package headfirst.design.facade;

public class Main {

    public static void main(String[] args) {
        Facade facade = new Facade();
        //facade.test();

        facade.testA();
        facade.testB();
        facade.testC();
        facade.testD();
    }
}

          运行结果:

起床。。。
洗漱。。。
吃饭。。。
上班。。。

6、总结

          门面模式将一些复杂的操作封装起来,以一个简单的接口提供给客户端。其可以定义多个子系统,但是层次之间的粗细粒度需要把握好。

          优点:(1)松散耦合。门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。(2)简单易用。门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。(3)更好的划分访问层次。通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

          缺点:不符合开闭原则。即对扩展开放,对修改关闭。当系统可以提供新的功能模块时,需要进行相应修改。

          本文只是简单介绍了门面模式,并未对其进行深入探讨,略显粗糙。希望本文对你有所帮助。


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介: 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 本课程内容定位学习设计原则,学习设计模式的基础。在实际开发过程中,并不是一定要求所有代码都遵循设计原则,我们要考虑人力、时间、成本、质量,不是刻意追求完美,要在适当的场景遵循设计原则,体现的是一种平衡取舍,帮助我们设计出更加优雅的代码结构。本章将详细介绍开闭原则(OCP)、依赖倒置原则(DIP)、单一职责原则(SRP)、接口隔离原则(ISP)、迪米特法则(LoD)、里氏替换原则(LSP)、合成复用原则(CARP)的具体内容。 为什么需要学习这门课程? 你在日常的开发中,会不会也遇到过同样的问题。系统出现问题,不知道问题究竟出在什么位置;当遇到产品需求,总是对代码缝缝补补,不能很快的去解决。而且平时工作中,总喜欢把代码堆在一起,出现问题时,不知道如何下手,工作效率很低,而且自己的能力也得不到提升。而这些都源于一个问题,那就是软件设计没做好。这门课能帮助你很好的认识设计模式,让你的能力得到提升。课程大纲: 为了让大家快速系统了解设计模式知识全貌,我为您总结了思维导图,帮您梳理学习重点,建议收藏!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值