装饰者模式
装饰者模式又称为包装模式,它主要是为了扩展对象的功能,通过持有对象的引用,把对象包装起来,可以在调用对象的方法之前或者之后增加新的功能,以达到给对象添加一些额外的职责,就像为对象添加了一些装饰。比继承更加灵活。
例如:
public abstract class Person {
// 人类-装饰者和被装饰者的父类抽象
private String name;
/**
* 核心行为
*/
public abstract void action();
}
/*
* @Description: 被装饰对象-程序员类
*/
public class Programmer extends Person{
@Override
public void action() {
System.out.println("程序员在开心的改BUG...");
}
}
/**
* @Description:被装饰对象-学生类
*/
public class Student extends Person {
@Override
public void action() {
System.out.println("学生在认真的学习!...");
}
}
// 装饰者抽象
public abstract class Decorator extends Person{
protected Person person;//被装饰者
public Decorator(Person person) {
this.person = person;
}
}
/**
* @Description:装饰者对象-跳舞
*/
public class DanceDecorator extends Decorator{
public DanceDecorator(Person person) {
super(person);
}
@Override
public void action() {
System.out.println("会跳舞的....");
person.action();
}
}
/**
* @Author: 加中实训
* @Date:2021/8/17 15:12
* @Description:装饰者对象-唱歌
*/
public class SingDecorator extends Decorator {
public SingDecorator(Person person) {
super(person);
}
@Override
public void action() {
System.out.println("会唱歌的...");
person.action();//调用被装饰者的核心行为
}
}
public class Test {
public static void main(String[] args) {
//被装饰者对象
Person person = new DanceDecorator(new Student());
person.action();
Person person1 = new SingDecorator(new DanceDecorator(new Programmer()));
person1.action();
}
}