开发者社区> 兴化> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

设计模式-6-外观模式

简介: 外观模式(Facade Pattern)应该是最好理解的一个设计模式了,在我们项目中向外部提供一个外部可以访问系统的接口,然由这个接口去耦合子系统或者子接口,外部与子接口完全解耦。这种类型的设计模式属于结构型模式。
+关注继续查看

外观模式(Facade Pattern)应该是最好理解的一个设计模式了,在我们项目中向外部提供一个外部可以访问系统的接口,然由这个接口去耦合子系统或者子接口,外部与子接口完全解耦。这种类型的设计模式属于结构型模式。

       我们国家最近提出了“进一个门,办所有事”的概念,无论你办什么事情都可以去政务大厅办理,不需要挨个去各个部门跑啦,政务大厅就是对外的接口,各个部门是子接口,你只要找到政务大厅就可以,不需要管各个部门在哪里。大大降低了复杂性!

       在项目中,我们有3个子接口,往常我们要分别取调用这3个接口来实现不同的功能,现在我们添加一个对外接口,外部只调用这个对外接口,由对外接口去调用3个子接口,我们不管3个子接口啥情况,只要交互外部接口就好,这就是外观模式。

代码实现一下哈:

一、建个接口

package com.xing.design.facade;
/**
 * 玩
 * @author xing
 */
public interface Play {
void playSome();
}

二、建立三个不同功能的类:

package com.xing.design.facade;
public class PlayQ implements Play {
@Override
public void playSome() {
    System.out.println("我想玩球...");
  }
}
package com.xing.design.facade;
public class PlayDQ implements Play {
@Override
public void playSome() {
    System.out.println("我想玩大球...");
  }
}
package com.xing.design.facade;
public class PlayDQQ implements Play {
@Override
public void playSome() {
    System.out.println("我想玩两个大球...");
  }
}

三、搞一个外观类

package com.xing.design.facade;
public class PlayMake {
private Play playQ;
private Play playDQ;
private Play playDQQ;
public PlayMake(){
    playQ = new PlayQ();
    playDQ = new PlayDQ();
    playDQQ = new PlayDQQ();
  }
public void playQ() {
    playQ.playSome();
  }
public void playDQ() {
    playDQ.playSome();
  }
public void playDQQ() {
    playDQQ.playSome();
  }
}

四、直接交互外观类来调用3个子接口:

package com.xing.design.facade;
public class FacadeDemo {
public static void main(String[] args) {
    PlayMake playMake = new PlayMake();
    playMake.playQ();
    playMake.playDQ();
    playMake.playDQQ();
  }
}

五、结果

       可以看到我们只交互了外观类PlayMake,子接口对我们是完全隐藏的,我们并不用去关注子接口的球是玩的多么复杂,这就简化了我们的调用。

       同时这里也可以看出外观模式的缺点,如果我要不止是玩两个球,还想玩别的,那我就要修改外观类和外部调用代码,这就违反了“开闭原则”。


PS:开闭原则

       1988年,勃兰特·梅耶(Bertrand Meyer)在他的著作《面向对象软件构造(Object Oriented Software Construction)》中提出了开闭原则,它的原文是这样:“Software entities should be open for extension,but closed for modification”。翻译过来就是:“软件实体应当对扩展开放,对修改关闭”。这句话说得略微有点专业,我们把它讲得更通俗一点,也就是:软件系统中包含的各种组件,例如 模块(Modules)、 类(Classes)以及 功能(Functions)等等,应该在不修改现有代码的基础上,引入新功能。开闭原则中“开”,是指对于组件 功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。


总结:

       外观模式就是将复杂的子模块功能进行封装,外部调用只交互提供的外观类,由外观类去和子模块交互,降低系统使用的复杂性和耦合度。



END

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
设计模式之外观模式
本文通过老王改造小王公司的整体架构来说明外观模式,所谓的外观模式其实就是在各种复杂的子系统中抽象出来一个接口,隐藏具体的实现细节,调用方调用时只需要调用接口即可。为了加深理解我们会选出外观模式在源码中的应用进行重点的介绍,最后是我对设计模式学习过程中的一些思考。
18 0
【设计模式】外观
【设计模式】外观
37 0
设计模式(十三)之外观模式
外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。
37 0
设计模式 -- 外观模式
设计模式 -- 外观模式
113 0
入门设计模式之外观
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80871459 学习更多设计模式请参考:入门设计模式之汇总篇 外观模式:外部系统与子系统的通信必须通过一个统一的对象进行 举个例子,现在结婚是不是都找婚庆公司啊,为什么呢?因为如果不找婚庆公司自己筹备的话,我们可能得自己跑去订酒店,自己去找主持人,自己去找摄像,自己去找车队。
845 0
设计模式(十一)外观模式
外观模式是另一种结构型设计模式,当我们想要隐藏系统的复杂实现,想客户包含简单的使用接口的时候,就可以使用外观模式。我们需要创建一个外观类,提供要给用户暴露的方法。
576 0
设计模式之十(外观模式)
原文:设计模式之十(外观模式) 前言 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一系统更加容易使用. 结构图 SubSystem  Class 子系统类集合 实现子系统的功能,处理Facade对象指派的任务,注意子类中没有Facade的任何信...
896 0
设计模式之十(外观模式)
前言 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一系统更加容易使用. 结构图 SubSystem  Class 子系统类集合 实现子系统的功能,处理Facade对象指派的任务,注意子类中没有Facade的任何信息,即没有对Facade对象的引...
700 0
+关注
兴化
码中自由一片天地。。。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载