Java设计模式之装饰者模式详解

作者:尘小新 时间:2021-08-16 03:00:17 

Java设计模式之装饰者模式详解

装饰器模式(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("穿衣服");
}
}

测试类:根据装饰的顺序和对象不同,呈现不同的结果和顺序

Java设计模式之装饰者模式详解

Java设计模式之装饰者模式详解

来源: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
  • asp之家 软件编程 m.aspxhome.com