Java--设计模式-6-外观模式

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

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

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

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

代码实现一下哈:

一、建个接口

packagecom.xing.design.facade;
/*** 玩* @author xing*/publicinterfacePlay {
voidplaySome();
}

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

packagecom.xing.design.facade;
publicclassPlayQimplementsPlay {
@OverridepublicvoidplaySome() {
System.out.println("我想玩球...");
  }
}
packagecom.xing.design.facade;
publicclassPlayDQimplementsPlay {
@OverridepublicvoidplaySome() {
System.out.println("我想玩大球...");
  }
}
packagecom.xing.design.facade;
publicclassPlayDQQimplementsPlay {
@OverridepublicvoidplaySome() {
System.out.println("我想玩两个大球...");
  }
}

三、搞一个外观类

packagecom.xing.design.facade;
publicclassPlayMake {
privatePlayplayQ;
privatePlayplayDQ;
privatePlayplayDQQ;
publicPlayMake(){
playQ=newPlayQ();
playDQ=newPlayDQ();
playDQQ=newPlayDQQ();
  }
publicvoidplayQ() {
playQ.playSome();
  }
publicvoidplayDQ() {
playDQ.playSome();
  }
publicvoidplayDQQ() {
playDQQ.playSome();
  }
}

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

packagecom.xing.design.facade;
publicclassFacadeDemo {
publicstaticvoidmain(String[] args) {
PlayMakeplayMake=newPlayMake();
playMake.playQ();
playMake.playDQ();
playMake.playDQQ();
  }
}

五、结果

image.png

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

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


PS:开闭原则

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


总结:

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



END

目录
相关文章
|
19天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
29天前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
33 4
|
2月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
50 0
[Java]23种设计模式
|
1月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
3月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
3月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
3月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
3月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
3月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)