0%

java设计模式(结构型7种)

文章字数:1118,阅读全文大约需要4分钟

适配器模式(Adapter Pattern)

意图:当一个已经在运行的接口因不兼容而不适应新的接口,把一个接口转换成另一个接口。(解决现有对象不满足新环境的需求)

关键实现:

  1. 新建一个拥有满足新环境需求的接口
  2. 实现此接口,原有的功能引入原接口实现,然后再实现新功能

例子: springSession: 实现了HttpSession接口,内部实现使用的是ExpiringSession,并拓展了其它没有的功能。即session信息都保存在ExpiringSession中(老接口),但是需要实现HttpSession(新接口)的功能。

桥接模式(Bridge Pattern)

意图:创建一段代码时为了保证可拓展性,将抽象部分和实现部分分离,使他们可以单独变换。即一个抽象类,有部分实现了的方法,这些方法组成一个接口,分别不同实现。另外一部分抽象方法留给实现类去实现。

实现:

  1. 创建已经实现的方法的接口,并分别实现
  2. 创建桥接抽象方法,里面提供构造方法选则不同的已实现接口的实现类
  3. 实现抽象方法,使用内置的接口实现定制内容

和视频器模式区别:适配器是现有接口改造成新接口,这个是全新的接口为了方便拓展
相同:都是接口内置其它的实现类,使用接口操作内置的实现类。

组合模式(Composite Pattern)

意图:对象中包含该对象的集合,主要表示对象的一对多关系。总体组成树形结构,可以表示例如董事长->总经理->一堆副总->各部门员工 这样的结构

实现: 创建一个节点对象,其中包含List,list类型为自身类型。并提供增删改查的方法。

装饰器模式(Decorator Pattern)

意图:现有对象添加新的功能,并且不改变原有对象的方法。

实现:

  1. 继承原有对象的接口,保证创建的新对象符合原有接口的方法规则
  2. 内置原有对象,并调用其基本功能,保证功能的一致
  3. 在原有功能上添加自定义的新功能

例子:HttpServletRequestWrapper使用装饰模式增强request的功能(参数拦截之类的)

外观模式(Facade Pattern)

意图:隐藏系统的复杂性,提供一个接口直接完成复杂操作。

实现:将一系列一起使用的接口按照使用顺序调用,再放回唯一值。简而言之就是封装

享元模式(Flyweight Pattern)

意图:减少对象创建的数量,减少内存占用,提高效率。对象复用。

实现:创建存储使用过的对象的列表,当需要时从列表中取对象而不是自己重新创建。当然,有很多细节,比如初始对象数量,最大数量,空闲对象存活时间,对象不够用的策略等。

例子:线程池,连接池

代理模式(Proxy Pattern)

意图:当对象直接访问有问题(对象在远程机器上、安全控制、进程外访问、创建开销大)等情况下,提供一个中间层看似和原有类一样,其实做了中间的转换操作。

实现:

  1. 创建一个新的类,继承需要代理的类的接口,即保持一样的对外方法结构。
  2. 新的类完成中间操作,并访问被代理的类。(远程访问,权限控制,单例等)

不属于7种,也是结构型

过滤器模式(Filter)/标准模式(Criteria)

意图:将挑选规则和挑选动作分离,使一个挑选的动作可以选择不同的规则。

实现:

  1. 定义规则接口,里面有选择规则的函数
  2. 创建类使用规则接口挑选出符合规则的元素
  3. 创建不同的规则(实现规则接口)

例子:java8stream.filter(StringUtil::notBlack)