设计模式——外观模式

 相关链接:

【设计模式】专栏:【设计模式】专栏

相关例子可下载: Java常用设计模式例子

外观模式

前言

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。

如下图,图中给出了客户去当地房产局办理房产证过户要遇到的相关部门。

外观模式的定义和特点

外观模式(Facade Pattern)又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

外观模式是迪米特法则的典型应用。

主要解决

降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。

优点

  • 降低了子系统与客户端之间的耦合度,减少系统相互依赖,使得子系统的变化不会影响调用它的客户类

  • 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更容易。

  • 降低了大型软件系统中的编译依赖性,简化了子系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他子系统,也不会影响外观对象。

  • 提高了灵活性

  • 提高了安全性

缺点

  • 不能很好地限制客户使用子系统类,很容易带来未知风险

  • 增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”

外观模式的角色

外观模式的结构比较简单,它包含了对各个子系统的引用,客户端可以通过它访问各个子系统的功能。它包含的角色有:

外观(Facade)角色

为多个子系统对外提供一个共同的接口

子系统(Sub System)角色

实现系统的部分功能,客户可以通过外观角色访问它

客户(Client)角色

通过一个外观角色访问各个子系统的功能

示例代码

子系统角色

/**
 * 外观模式——子系统
 *
 */
public class SubSystem01 {

    public void method01(){
        System.out.println("子系统01被调用");
    }
}

/**
 * 外观模式——子系统
 *
 */
public class SubSystem02 {

    public void method02() {
        System.out.println("子系统02被调用");
    }

}

/**
 * 外观模式——子系统
 *
 */
public class SubSystem03 {

    public void method03() {
        System.out.println("子系统03倍调用");
    }
}

外观角色

/**
 * 外观模式——外观
 *
 */
public class Facade {

    /**
     * 调用子系统
     */
    public void method() {
        // 调用子系统01
        SubSystem01 system01 = new SubSystem01();
        system01.method01();
        // 调用子系统02
        SubSystem02 system02 = new SubSystem02();
        system02.method02();
        // 调用子系统03
        SubSystem03 system03 = new SubSystem03();
        system03.method03();
    }

}

客户角色

/**
 * 外观模式——客户
 *
 */
public class FacadePattern {

    public static void main(String[] args) {
        // 创建外观对象
        Facade facade = new Facade();
        // 利用外观对象调用各子系统
        facade.method();
    }

}

    结束语

1、更多设计模式内容请看【设计模式】专栏

2、相关例子代码可下载: Java常用设计模式例子

PS:  【 Java常用设计模式例子 】 内已包含 【设计模式】专栏 里所涉及的代码,需要代码的同学可以下载哦,如果之前已下载过的同学,就不需要重复下载啦~

以上内容如有不正确或需要补充的地方,还请多多请教,会及时更新改正~

欢迎评论~ 感谢点赞~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值