装饰者模式
1 概述
装饰者模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时不改变其结构。这种模式属于结构性模式,是作为现有的类的一个包装。
它创建了一个装饰类,来包装原有的类。
为了解决在不想增加很多子类的情况下扩展类的问题。
2 实现
需要一个基类、一个实体类;延伸出来需要提供基类的实现接口、实体类的抽象装饰类。
抽象类:作为父类抽去了子类集合的常见方法,抽象类不是用于实例化对象的,也不能用于实例化对象,它只能被继承,也只有被继承之后才能被使用。
2.1 实现步骤
1 创建一个接口
public interface Animal {
public void create();
}
2 接口的实现类(基类)
public class Cat implements Animal {
@Override
public void create() {
System.out.println("cat : create()");
}
}
3 装饰者抽象类
public abstract class AnimalDecorator implements Animal{
protected Animal decorateAnimal;
public AnimalDecorator(Animal decorateAnimal){
this.decorateAnimal = decorateAnimal;
}
public void draw(){
decorateAnimal.create();
}
}
4 装饰者具体类
public class OldAnimalDecorator extends AnimalDecorator {
public OldAnimalDecorator(Animal decorateAnimal) {
super(decorateAnimal);
}
@Override
public void create() {
decorateAnimal.create();
setOldAnimalAge(decorateAnimal);
}
private void setOldAnimalAge(Animal decorateAnimal) {
System.out.println("20");
}
}
5 测试
public class Test {
public static void main(String[] args) {
Animal catNormal = new Cat();
AnimalDecorator catDecorator = new OldAnimalDecorator(new Cat());
catNormal.create();
catDecorator.create();
}
}
/////////////////////////////////
// cat : create()
// cat : create()
// 20
3 总结
装饰者模式的重点:
1 Component:主体,即是被修饰的主体
2 ConcreteComponent:具体不同类型的主题
3 Decorator:装饰者