Decorator(装饰者模式)
介绍
- 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结钩, 动态地给一个对象添加一些额外的职责。
- 就相当于一个 女生 给自己 化妆,戴饰品,并不会改变其本身是一个女性的特点,又修饰了自身
- 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装
优点: 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
缺点: 多层装饰比较复杂。
注意: 可代替继承
实现
1、 创建一个接口
public interface Clothes {
void wear();
}
2、 创建实现接口的实体类
public class Hat implements Clothes{
@Override
public void wear() {
System.out.println("戴着帽子....");
}
}
public class Jacket implements Clothes{
@Override
public void wear() {
System.out.println("穿着夹克.....");
}
}
3、 创建实现了 Clothes 接口的抽象装饰类
public abstract class ClothesDecorator implements Clothes {
protected Clothes clothes;
public ClothesDecorator(Clothes clothes) {
this.clothes = clothes;
}
@Override
public void wear() {
clothes.wear();
}
}
4、 创建扩展了 ClothesDecorator 类的实体装饰类
public class RedClothesDecorator extends ClothesDecorator{
public RedClothesDecorator(Clothes clothes) {
super(clothes);
}
@Override
public void wear() {
super.wear();
clothesColor(clothes);
}
private void clothesColor(Clothes clothes) {
System.out.println(clothes.toString() + "是绿色的...");
}
}
5、 使用 RedClothesDecorator 来装饰 Shape 对象
public class DecoratorDemo {
public static void main(String[] args) {
RedClothesDecorator redClothesDecorator = new RedClothesDecorator(new Hat());
redClothesDecorator.wear();
RedClothesDecorator jacketClothesDecorator = new RedClothesDecorator(new Jacket());
jacketClothesDecorator.wear();
}
}