设计模式之装饰者模式DecoratorPattern(四)

server/2024/10/19 3:32:22/

一、概述

装饰者模式(Decorator Pattern)是一种用于动态地给一个对象添加一些额外的职责的设计模式。就增加功能来说,装饰者模式相比生成子类更为灵活。装饰者模式是一种对象结构型模式。

装饰者模式可以在不改变一个对象本身功能的基础上增强其功能,通过采用组合而非继承的方式,实现了在运行时动态地扩展一个对象的功能。装饰者模式提供了一种比继承更加灵活的方式来扩展一个对象的功能。

二、模式结构

装饰者模式包含以下角色:

  • 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
  • 具体构件(ConcreteComponent)角色:实现抽象构件,具体到某一个对象。
  • 装饰(Decorator)角色:持有一个指向抽象构件的引用并继承抽象构件的接口。
  • 具体装饰(ConcreteDecorator)角色:实现装饰角色,负责为构件对象“贴上”附加的责任。

三、代码实例

1、Component接口

package com.xu.demo.decoratorPattern;// 抽象构件角色
public interface Component {void operation();
}

2、ConcreteComponent类

package com.xu.demo.decoratorPattern;// 具体构件角色
public class ConcreteComponent implements Component {@Overridepublic void operation() {System.out.println("执行具体构件对象的操作");}
}

3、 Decorator类

package com.xu.demo.decoratorPattern;// 抽象装饰者角色
public class Decorator implements Component {protected Component component;public Decorator(Component component) {this.component = component;}@Overridepublic void operation() {if (component != null) {component.operation();}}
}

4、ConcreteDecoratorA子类

package com.xu.demo.decoratorPattern;// 具体装饰角色A
public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}@Overridepublic void operation() {//调用父类的operation方法super.operation();//再调用自己的内部额外增强方法addedFunctionA();}public void addedFunctionA() {System.out.println("为构件对象添加功能A");}
}

5、 ConcreteDecoratorB子类

package com.xu.demo.decoratorPattern;// 具体装饰角色B
public class ConcreteDecoratorB extends Decorator {public ConcreteDecoratorB(Component component) {super(component);}@Overridepublic void operation() {//调用父类的operation方法super.operation();//再调用自己的内部额外增强方法addedFunctionB();}public void addedFunctionB() {System.out.println("为构件对象添加功能B");}
}

6、DecoratorPattern类

package com.xu.demo.decoratorPattern;public class DecoratorPattern {public static void main(String[] args) {Component component = new ConcreteComponent();// 使用装饰者A增强功能component = new ConcreteDecoratorA(component);// 使用装饰者B进一步增强功能component = new ConcreteDecoratorB(component);/*执行操作,会依次调用ConcreteComponent的operation、ConcreteDecoratorA的addedFunctionA、ConcreteDecoratorB的addedFunctionB*/component.operation();}
}

 运行结果:


http://www.ppmy.cn/server/28675.html

相关文章

基于Springboot的爱心商城系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的爱心商城系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

C++——数据类型笔记

在C编程中,了解各类数据类型也是至关重要的。下面我会总结一下C中的数据类型,包括基本类型,符合类型和自定义类型。方便自己整理和理解。 1,基本类型 C中的基本类型是构建其他数据类型的基础,常见的基础类…

postman一直转圈圈,无法启动

解决 地址栏输入%appdata%进入此目录,删除%appdata%目录下的postman文件可以解决问题。

2024长三角快递物流展:科技激荡,行业焕发新活力

7月8日,杭州将迎来快递物流科技盛宴,这是一年一度的行业盛会,吸引了全球领先的快递物流企业和创新技术汇聚一堂。届时,会展中心将全方位展示快递物流及供应链、分拣系统、输送设备、智能搬运、智能仓储、自动识别、无人车、AGV机器…

基于OpenMV 双轴机械臂 机器学习

文章目录 一、项目简要二、目标追踪1. 色块识别与最大色块筛选2. PID位置闭环 三、机器学习1. Device12. Device2 四、效果演示 一、项目简要 两套二维云台设备,Device1通过摄像头捕捉目标物块点位进行实时追踪,再将自身点位传到Device2,Dev…

Java设计模式 _结构型模式_桥接模式

一、桥接模式 1、桥接模式 桥接模式(Bridge Pattern)是一种结构型设计模式。用于把一个类中多个维度的抽象化与实现化解耦,使得二者可以独立变化。 2、实现思路 使用桥接模式,一定要找到这个类中两个变化的维度:如支…

Windows php 安装 Memcached扩展、php缺失 Memcached扩展、Class ‘Memcached‘ not found

在Windows系统下如何安装 php Memcached 扩展 下载dll文件 pecl地址:https://pecl.php.net/package/memcached 根据版本进行选择 : 解压下载的文件后得到了这么样的文件结构: 配置 移动dll文件到相应文件位置 重点: libme…

数据结构 - C/C++ - 数组

目录 结构特性 内存布局 结构样式 结构拓展 数据初始 元素访问 插入元素 删除元素 查找元素 修改元素 结构设计 成员变量 构造函数 功能函数 示例代码 结构特性 长度固定:数组的长度在创建时已经被确定,如果需要动态改变数组的长度&#…