门面模式 与 装饰器模式(1)

简介: 门面模式 与 装饰器模式(1)

一、门面模式定义


  • 定义:又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口
  • 外观模式定义了一个高层接口,让子系统更容易使用
  • 类型:结构型
  • UML类图


image.png


门面模式是对系统复杂的关系处理做了一个封装,对外提供一个简单的接口,成员介绍:

子系统:被门面模式封装的子系统,也是具体业务逻辑的细节

facade类:门面类,对子系统执行流程进行封装,对外开放功能接口,一般为单例对象。

二、门面模式实例

门面模式主要包含2种角色:


**外观角色(Facade):**也称门面角色,系统对外的统一接口;


**子系统角色(SubSystem):**可以同时有一个或多个 SubSystem。每个 SubSytem 都不是一个单独

的类,而是一个类的集合。 SubSystem 并不知道 Facade 的存在,对于 SubSystem 而言, Facade 只

是另一个客户端而已(即 Facade 对 SubSystem 透明)。


下面是门面模式的通用代码,首先分别创建3个子系统的业务逻辑SubSystemA、SubSystemB、

SubSystemC,代码很简单:


image.png


来看客户端代码:


// 外观角色 Facade
public class Facade {
    private SubSystemA a = new SubSystemA();
    private SubSystemB b = new SubSystemB();
    private SubSystemC c = new SubSystemC();
    // 对外接口
    public void doA() {
        this.a.doA();
    }
    // 对外接口
    public void doB() {
        this.b.doB();
    }
    // 对外接口
    public void doC() {
        this.c.doC();
    }
}


三、门面模式的优缺点

优点:

1、简化了调用过程,无需深入了解子系统,以防给子系统带来风险

2、减少系统依赖、松散耦合

3、更好地划分访问层次,提高了安全性

4、遵循迪米特法则,即最少知道原则。


缺点:

1、当增加子系统和扩展子系统行为时,可能容易带来位置风险

2、不符合开闭原则

3、某些情况下可能违背的单一职责原则


四、门面模式在实际中的应用

例如:前端ReseFul请求——>Controll ->Dao->Service


五、装饰器模式介绍

装饰器模式在我们生活中应用也比较多如给煎饼加鸡蛋;给蛋糕加上一些水果;给房子装修等,为对象扩展一些额外的职责。装饰器在代码程序中适用于以下场景:


1、用于扩展一个类的功能或给一个类添加附加职责。


2、动态的给一个对象添加功能,这些功能可以再动态的撤销。


3、需要为一批的兄弟类进行改装或加装功能。


目录
相关文章
|
安全 Java
final关键字
final关键字
278 0
|
12月前
|
Java 数据库连接 数据库
Java服务提供接口(SPI)的设计与应用剖析
Java SPI提供了一种优雅的服务扩展和动态加载机制,使得Java应用程序可以轻松地扩展功能和替换组件。通过合理的设计与应用,SPI可以大大增强Java应用的灵活性和可扩展性。
151 19
|
数据采集 Java 数据处理
Java流与链表:探索java.util.stream与LinkedList的交汇点
本文探讨了Java中流(Streams)与链表(LinkedList)的结合使用,展示了如何通过流处理LinkedList以实现高效数据操作。示例代码包括LinkedList的基本操作、使用Stream进行过滤和映射,以及结合HttpClient和代理IP实现网络爬虫。代理IP有助于绕过反爬机制,提高爬取效率。通过结合这些技术,开发者能编写出更简洁、高效的代码。
190 2
Java流与链表:探索java.util.stream与LinkedList的交汇点
|
SQL XML Java
蓝易云 - ibatis与mybatis的区别
总的来说,MyBatis在功能性和易用性上都优于iBatis,是iBatis的改进版。
138 2
|
安全 算法 Java
Java一分钟:线程同步:synchronized关键字
【5月更文挑战第11天】Java中的`synchronized`关键字用于线程同步,防止竞态条件,确保数据一致性。本文介绍了其工作原理、常见问题及避免策略。同步方法和同步代码块是两种使用形式,需注意避免死锁、过度使用导致的性能影响以及理解锁的可重入性和升级降级机制。示例展示了同步方法和代码块的运用,以及如何避免死锁。正确使用`synchronized`是编写多线程安全代码的核心。
350 2
|
IDE Java 数据库连接
Lombok注解大全
这些是Lombok中的一些常见注解,它们可以显著减少Java代码中的冗余代码,提高代码的可读性和可维护性。不过,在使用Lombok之前,请确保你的开发环境已经配置好支持Lombok,通常需要安装相应的插件或进行设置以使IDE(如Eclipse、IntelliJ IDEA)能够正确解析Lombok注解。
197 2
|
缓存 算法 Java
提升编程效率的利器: 解析Google Guava库之常用工具类-40个示例(七)
提升编程效率的利器: 解析Google Guava库之常用工具类-40个示例(七)
|
数据安全/隐私保护 C++
c++实现http客户端和服务端的开源库以及Base64加密密码
c++实现http客户端和服务端的开源库以及Base64加密密码
246 0
|
存储 安全 网络安全
网络信息安全管理之资产、脆弱性、威胁、风险
安全风险管理的三要素分别是资产、威胁和脆弱性,脆弱性的存在将会导致风险,而威胁主体利用脆弱性产生风险。网络攻击主要利用了系统的脆弱性。由于网络管理对象自身的脆弱性,使得威胁的发生成为可能,从而造成了不同的影响,形成了风险。
2005 0
|
存储 编译器 C语言
性能优化特性之:LTO
本文介绍了倚天实例上的编译优化特性:LTO,并从优化原理、使用方法进行了详细阐述。