Java设计模式之装饰者模式详解
作者:尘小新 时间:2021-08-16 03:00:17
装饰器模式(Decorator Pattern
)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
以一个Person对象为例。Person作为一个接口,Student(学生)和Doctor(医生)为Person接口的两个具体类,DecoratorPerson为Person的装饰类,可对具体类进行装饰。ShoeDecorator(鞋子装饰类)和DressDecorator(衣服装饰类)为具体的装饰类。这个案例可对学生和医生进行装饰。
具体代码:
Person:
public interface Person {
void description();
}
Student:
public class Student implements Person {
@Override
public void description() {
System.out.println("学生");
}
}
Doctor:
public class Doctor implements Person {
@Override
public void description() {
System.out.println("医生");
}
}
DecoratePerson:
public class DecoratePerson implements Person {
private Person person;
public DecoratePerson(Person person) {
this.person = person;
}
@Override
public void description() {
person.description();
}
}
ShoeDecorate:
public class ShoeDecorate extends DecoratePerson {
public ShoeDecorate(Person person) {
super(person);
}
@Override
public void description() {
super.description();
System.out.println("穿鞋子");
}
}
DressDecorate:
public class DressDecorate extends DecoratePerson {
public DressDecorate(Person person) {
super(person);
}
@Override
public void description() {
super.description();
System.out.println("穿衣服");
}
}
测试类:根据装饰的顺序和对象不同,呈现不同的结果和顺序
来源:https://blog.csdn.net/weixin_39941298/article/details/120707566
标签:Java,设计模式,装饰者模式
0
投稿
猜你喜欢
Java使用备忘录模式实现过关类游戏功能详解
2022-11-30 08:52:51
C#基础之异步调用实例教程
2021-07-03 08:44:56
Spring JPA 增加字段执行异常问题及解决
2023-06-25 23:55:58
Java简单高效实现分页功能
2022-05-24 13:56:02
Java获取时间年、月、日的方法
2022-02-10 16:58:36
java中的静态代码块、构造代码块、构造方法详解
2023-06-18 12:11:32
android studio2.3如何编译动态库的过程详解
2023-07-11 03:47:48
Hadoop源码分析六启动文件namenode原理详解
2021-08-20 01:03:55
Java异常处理try catch的基本使用
2023-11-24 05:04:38
Java经典面试题最全汇总208道(四)
2023-11-08 23:59:26
MyBatis-Plus多表联查(动态查询)的项目实践
2023-11-19 21:43:17
Java 字符串转float运算 float转字符串的方法
2022-04-09 10:09:06
WPF实现多运算符表达式计算器
2023-07-17 10:31:40
Spring Boot启动过程全面解析(三)
2023-09-13 13:16:39
【Java IO流】字节流和字符流的实例讲解
2023-08-08 20:45:58
JavaWeb开发基于ssm的校园服务系统(实例详解)
2022-11-07 16:40:48
解决Mybatis-Plus操作分页后数据失效问题
2023-11-25 11:31:55
SpringBoot整合Jackson超详细用法(附Jackson工具类)
2023-05-31 23:56:06
C#实现3步手动建DataGridView的方法
2021-10-13 22:35:56
Java中ArrayList和LinkedList区别
2023-09-06 20:43:09