GOF23设计模式-结构型(7种)


源码链接:https://github.com/ouyangxizhu/design_pattern.git
在这里插入图片描述

二、结构型模式

1. 外观模式(门面模式)

com.ouyangxizhu.design.pattern.structural.facade

定义

提供了一个结构来访问子系统中的一群接口。
这个外观结构封装了子系统之间的调用逻辑,调用顺序。比如购物,用户只关注我能不能买成功(下单功能),至于怎么减库存,怎么生成订单,怎么物流配送都不需要知道。

适用场景

  1. 当子系统越来越复杂,增加外观模式提供简单接口调用。
  2. 构件多层系统结构,利用外观对象作为每层的入口,简化层间调用。

优点

  1. 简化了调用过程,无需深入了解子系统,防止带来风险。
  2. 减少系统依赖,松散耦合。
  3. 更好的划分访问层次。
  4. 符合迪米特法则,即最少知道原则。(调用者只和外观类有关系)

缺点

  1. 增加或者扩展子系统容易引入风险。
  2. 增加或者扩展子系统不符合开闭原则。(可以使用抽象外观类,或者采用继承实现)

源码

都是对jdbc的封装。
org.springframework.jdbc.support.JdbcUtils#closeConnection(封装Connection的close()等)
org.springframework.jdbc.support.JdbcUtils#getResultSetValue(java.sql.ResultSet, int, java.lang.Class<?>)
org.apache.ibatis.session.Configuration#newParameterHandler等handler
tomcat的requestFacade类(实现HttpSevletRequest接口)StatementFacade等

外观模式和中介者模式

外观模式关注外界和外观类(封装子系统)之间的交互。
中介者模式关注子系统内部之间的交互。

外观模式和单例模式

可以把外观模式的外观对象做成单例使用。

外观模式和抽象工厂模式

外观对象可以通过抽象工厂获得子系统的实例。子系统可以对外观实例屏蔽细节。

2. 装饰者模式

com.ouyangxizhu.design.pattern.structural.decorator

定义

装饰者有一个有参构造器,该参数为被装饰者,只需要在调用被装饰者前或者后添加逻辑,就可以进行装饰。可以多层装饰。
在不改变原有对象的基础上,将功能附加到对象上。提供了比继承更有弹性的替代方案(扩展原有对象功能,装饰者是运行期间添加,并且可以自由组合顺序的装饰,继承是编译过程添加的。装饰者会继承被装饰的对象)一般装饰者会有自己父类的属性,可以在构造器的时候注入。

适用场景

  1. 添加一个类的功能,或者给一个类添加附加职责。
  2. 动态的给一个对象添加功能,这些功能可以再动态撤销

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值