文章字数:1118,阅读全文大约需要4分钟
适配器模式(Adapter Pattern)
意图:当一个已经在运行的接口因不兼容而不适应新的接口,把一个接口转换成另一个接口。(解决现有对象不满足新环境的需求)
关键实现:
- 新建一个拥有满足新环境需求的接口
- 实现此接口,原有的功能引入原接口实现,然后再实现新功能
例子: springSession
: 实现了HttpSession
接口,内部实现使用的是ExpiringSession
,并拓展了其它没有的功能。即session
信息都保存在ExpiringSession
中(老接口),但是需要实现HttpSession
(新接口)的功能。
桥接模式(Bridge Pattern)
意图:创建一段代码时为了保证可拓展性,将抽象部分和实现部分分离,使他们可以单独变换。即一个抽象类,有部分实现了的方法,这些方法组成一个接口,分别不同实现。另外一部分抽象方法留给实现类去实现。
实现:
- 创建已经实现的方法的接口,并分别实现
- 创建桥接抽象方法,里面提供构造方法选则不同的已实现接口的实现类
- 实现抽象方法,使用内置的接口实现定制内容
和视频器模式区别:适配器是现有接口改造成新接口,这个是全新的接口为了方便拓展
相同:都是接口内置其它的实现类,使用接口操作内置的实现类。
组合模式(Composite Pattern)
意图:对象中包含该对象的集合,主要表示对象的一对多关系。总体组成树形结构,可以表示例如董事长->总经理->一堆副总->各部门员工 这样的结构
实现: 创建一个节点对象,其中包含List,list类型为自身类型。并提供增删改查的方法。
装饰器模式(Decorator Pattern)
意图:现有对象添加新的功能,并且不改变原有对象的方法。
实现:
- 继承原有对象的接口,保证创建的新对象符合原有接口的方法规则
- 内置原有对象,并调用其基本功能,保证功能的一致
- 在原有功能上添加自定义的新功能
例子:HttpServletRequestWrapper
使用装饰模式增强request
的功能(参数拦截之类的)
外观模式(Facade Pattern)
意图:隐藏系统的复杂性,提供一个接口直接完成复杂操作。
实现:将一系列一起使用的接口按照使用顺序调用,再放回唯一值。简而言之就是封装
享元模式(Flyweight Pattern)
意图:减少对象创建的数量,减少内存占用,提高效率。对象复用。
实现:创建存储使用过的对象的列表,当需要时从列表中取对象而不是自己重新创建。当然,有很多细节,比如初始对象数量,最大数量,空闲对象存活时间,对象不够用的策略等。
例子:线程池,连接池
代理模式(Proxy Pattern)
意图:当对象直接访问有问题(对象在远程机器上、安全控制、进程外访问、创建开销大)等情况下,提供一个中间层看似和原有类一样,其实做了中间的转换操作。
实现:
- 创建一个新的类,继承需要代理的类的接口,即保持一样的对外方法结构。
- 新的类完成中间操作,并访问被代理的类。(远程访问,权限控制,单例等)
不属于7种,也是结构型
过滤器模式(Filter)/标准模式(Criteria)
意图:将挑选规则和挑选动作分离,使一个挑选的动作可以选择不同的规则。
实现:
- 定义规则接口,里面有选择规则的函数
- 创建类使用规则接口挑选出符合规则的元素
- 创建不同的规则(实现规则接口)
例子:java8
的stream.filter(StringUtil::notBlack)