关键词:
定义
- 指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
优点
- 装饰器模式完全遵守开闭原则
- 通过使用不同装饰类及这些装饰类的排列组合,可以实现不同效果
- 装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用
缺点
- 装饰器模式会增加许多子类,过度使用会增加程序得复杂性。
装饰器模式的结构与实现
使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰器模式的目标。
模式结构
包含角色如下:
- 【抽象构件角色】定义一个抽象接口以规范准备接收附加责任的对象。
- 【具体构件角色】实现抽象构件,通过装饰角色为其添加一些职责。
- 【抽象装饰角色】实现抽象构件接口,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
- 【具体装饰角色】继承抽象装饰,并给具体构件对象添加附加的责任来达到扩展具体构件的功能。
模式实现
抽象构件接口,代码如下:
package com.example.designmodedemo.principle.decorator;
/**
* 抽象构件
*/
public interface Component
void handle();
具体构件,代码如下:
package com.example.designmodedemo.principle.decorator;
/**
* 具体构件:实现抽象构件接口
*/
public class ComponentImpl implements Component
public ComponentImpl()
System.out.println(":> 创建具体构件");
@Override
public void handle()
System.out.println(":> 调用具体构件的 handle 方法");
抽象构件装饰,代码如下:
package com.example.designmodedemo.principle.decorator;
/**
* 抽象角色装饰
*/
public class Decorator implements Component
private Component component;
public Decorator(Component component)
this.component = component;
@Override
public void handle()
component.handle();
具体构件装饰,代码如下:
package com.example.designmodedemo.principle.decorator;
/**
* 具体构件装饰
*/
public class MyDecorator extends Decorator
public MyDecorator(Component component)
super(component);
public void handle()
super.handle();
addHandle();
private void addHandle()
System.out.println(":> 为具体构件增加新的处理逻辑功能");
客户端,调用代码如下:
/**
* 装饰器模式
*/
private void principle_decorator()
// 创建具体构件对象
Component component = new ComponentImpl();
// 创建具体构件装饰器对象,将具体构件对象构造传参进去
Decorator decorator = new MyDecorator(component);
// 装饰器对象处理(这里可扩展具体构件对象方法,新增需要的处理逻辑)
decorator.handle();
运行结果如下图:
应用场景
装饰器模式通常在以下几种情况使用:
- 当对象的功能要求可以动态地添加,也可以再动态地撤销时。
- 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。
- 当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关系很难实现,而采用装饰器模式却很好实现。
技术永不眠!我们下期见!
java设计模式之迭代器学习与掌握(代码片段)
文章目录定义优点缺点模式的结构与实现模式的结构模式的实现应用场景定义提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式优点遍历任务交由迭代器完... 查看详情
学习go语言之装饰器模式(代码片段)
一,首先理解装饰器模式:动态的给一个对象增加一些额外的职责,这是在软件设计原则上面,一个功能装饰另一个功能,每个功能遵循同一个接口是这个模式的特征。二,定义对象接口和装饰抽象类1typeIDecorateinterface2Do()345//装... 查看详情
java设计模式之迭代器学习与掌握(代码片段)
文章目录定义优点缺点模式的结构与实现模式的结构模式的实现应用场景定义提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式优点遍历任务交由迭代器完... 查看详情
java设计模式之迭代器学习与掌握(代码片段)
文章目录定义优点缺点模式的结构与实现模式的结构模式的实现应用场景定义提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式优点遍历任务交由迭代器完... 查看详情
设计模式学习之:装饰器模式(代码片段)
...创建大量的类来解决这个难题,这里面用到了装饰器这一设计模式。关于设计模式,之前也有学习过,但是因为比较抽象,加上实际工作中应用较少,所以学习效果往 查看详情
java设计模式之命令学习与掌握(代码片段)
文章目录定义优点缺点模式的结构与实现模式的结构模式的实现应用场景定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储... 查看详情
java设计模式之状态学习与掌握(代码片段)
文章目录定义优点缺点模式的结构与实现模式的结构模式的实现应用场景拓展状态模式与责任链模式的区别状态模式与策略模式的区别定义允许一个对象在其内部状态发生改变时改变其行为能力。状态模式是一种对象行为型模式... 查看详情
java设计模式之状态学习与掌握(代码片段)
文章目录定义优点缺点模式的结构与实现模式的结构模式的实现应用场景拓展状态模式与责任链模式的区别状态模式与策略模式的区别定义允许一个对象在其内部状态发生改变时改变其行为能力。状态模式是一种对象行为型模式... 查看详情
java设计模式之桥接学习与掌握(代码片段)
文章目录定义优点缺点桥接模式的结构与实现模式的结构模式的实现应用场景定义将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。优点... 查看详情
java设计模式之原型学习与掌握(代码片段)
文章目录什么是原型优点缺点模式结构与实现模式结构模式实现应用实例应用场景原型模式的扩展什么是原型将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。优点Java自带的原型模式基于内存二进... 查看详情
java模式之装饰器模式(代码片段)
...#xff0c;装饰器模式相比生成子类更为灵活,属于结构型设计模式装饰器模式提供了比继承更有弹性的替代方案将功能附加到对象上。因此,装饰器模式的核心功能是功能扩展,使用装饰器模式可以透明且动态的扩展类... 查看详情
java模式之装饰器模式(代码片段)
...#xff0c;装饰器模式相比生成子类更为灵活,属于结构型设计模式装饰器模式提供了比继承更有弹性的替代方案将功能附加到对象上。因此,装饰器模式的核心功能是功能扩展,使用装饰器模式可以透明且动态的扩展类... 查看详情
java设计模式之策略学习与掌握(代码片段)
...结构与实现模式的结构模式的实现应用场景前言个人建议设计模式这一系列的文章,多关注定义和模式的代码实现。至于模式结构和扩展或者是应用场景,基本了解过一下就好,没必要硬记。这只是我的个人建议... 查看详情
java设计模式之外观学习与掌握(代码片段)
文章目录定义优点缺点模式结构与实现模式结构模式的实现模式应用场景定义外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该... 查看详情
java设计模式之组合学习与掌握(代码片段)
文章目录定义优点缺点组合模式的结构与实现模式的结构模式的实现应用场景定义将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。组合模式一般用来描述整体与部分的关系,它将对象组织... 查看详情
设计模式之装饰器模式(代码片段)
...来帮忙,小王却想谋权篡位,老王通过教育他引出装饰器设计模式,第二部分针对老王提出的建设性意见实现装饰器模式,第三部分针对装饰器模式在Jdk中的IO、Spring中的缓存管理器、Mybatis的运用来加强我们的理解,第四部分说... 查看详情
二十三种设计模式之装饰器模式(代码片段)
装饰器模式的定义与特点装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰器模式的主要优点有:装饰器是继承的有力... 查看详情
java设计模式之观察者学习与掌握(代码片段)
文章目录定义优点缺点模式的结构与实现模式的结构模式的实现应用场景定义多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。这种模式有时又称作发... 查看详情