装饰器模式(Decorator Pattern)是一种用于动态地给一个对象添加一些额外的职责的设计模式。 就增加功能来说,装饰器模式相比生成子类更为灵活。
装饰器模式包含以下角色: 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。 具体构件(Concrete Component)角色:实现了抽象构件,并定义了它的固有操作。 装饰(Decorator)角色:持有一个指向构件对象的引用,并定义一个与抽象构件接口一致的接口。 具体装饰(Concrete Decorator)角色:负责给构件对象“贴上”附加的责任。
装饰器模式与继承关系的目的都是要扩展对象的功能,但是装饰器模式可以提供比继承更多的灵活性。 通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。 装饰器模式允许用户通过动态地给一个对象添加一些额外的职责来增加功能,就增加功能来说,装饰器模式相比生成子类更为灵活。
/**
* @Author: maoyouhua
* @CreateTime: 2024/03/27
* @Version: jdk21
* @Description:
*
* 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
* 画图
*/
public interface Component {
void draw();
}
/**
* 具体构件(Concrete Component)角色:实现了抽象构件,并定义了它的固有操作。
*/
public class ConcreteComponent implements Component {
@Override
public void draw() {
System.out.println("画了一只坤!");
}
}
/**
* @Author: maoyouhua
* @CreateTime: 2024/03/27
* @Version: jdk21
* @Description:
*
* 装饰(Decorator)角色:持有一个指向构件对象的引用.
*/
public abstract class AbstractDecorator implements Component {
protected Component concreteComponent;
public AbstractDecorator(Component concreteComponent) {
this.concreteComponent = concreteComponent;
}
}
/**
*
* 具体装饰(Concrete Decorator)角色:负责给构件对象“贴上”附加的责任。
*/
public class ConcreteDecorator extends AbstractDecorator {
public ConcreteDecorator(Component concreteComponent) {
super(concreteComponent);
}
@Override
public void draw() {
concreteComponent.draw();
Coloring();
}
private void Coloring(){
System.out.println("坤坤变成了红色");
}
public static void main(String[] args) {
Component component = new ConcreteDecorator(new ConcreteComponent());
component.draw();
}
}
更多【java-设计模式之装饰器模式】相关视频教程:www.yxfzedu.com