装饰器设计模式(Decorator Pattern)

描述: 装饰器设计模式就是给对象动态的添加职责,行为的,它是用来代替继承的。相比于继承它更显得灵活。

核心思想: 一般情况下当我们要扩展一个类的时候会使用继承,但这不是很安全,随着功能的增加子类会爆炸式的增长。

装饰器设计模式的优点: 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能

装饰器设计模式的缺点: 多层装饰比较复杂。

装饰器设计模式的使用场景:

  • 扩展一个类的功能。
  • 动态增加功能,动态撤销

示例:

  • 动物的抽象接口
1
2
3
4
public interface Animal {
// 一个吃的方法
void eat();
}
  • 猫实现动物接口
1
2
3
4
5
public class Cat  implements Animal {
public void eat() {
System.out.println("wo是猫,在吃饭");
}
}
  • 装饰器的抽象类
1
2
3
4
5
6
7
8
9
10
11
public abstract class CatDecoractor implements Animal {

private Animal animal;
public CatDecoractor(Animal animal){
this.animal=animal;
}

public void eat() {
animal.eat();
}
}
  • 现在给猫扩展一个喝水的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class CatDecoractorImpl  extends  CatDecoractor{

private Animal animal;
public CatDecoractorImpl(Animal animal) {
super(animal);
this.animal=animal;
}

@Override
public void eat() {
animal.eat();
drinking(animal);
}

public void drinking(Animal animal){
System.out.println("吃完之后在喝水");
}
}
  • 调用
1
2
3
4
5
6
7
8
    public static void main(String[] args) {
Cat cat = new Cat();
CatDecoractorImpl catDecoractor = new CatDecoractorImpl(cat);
catDecoractor.eat();

}
}

附图:

装饰器设计模式UML