23种设计模式之装饰器模式(Decorator)
结构型设计模式
意图: 装饰器模式是继承的一个替代模式,允许向一个现有的对象,在不改变对象结构的情况下添加新的功能。
单纯的从添加功能来说,装饰器类比子类更加灵活。
子类的方式,继承会为类引入静态特征,并随着拓展功能越来越多,子类会非常的膨胀。
优点:
- 耦合度低,装饰器类和被装饰类可以独立发展。装饰器类动态的给被装饰类添加功能
缺点:
- 多层装饰会很复杂
关键代码:
装饰器类实现接口,并且将接口类作为属性引入
注意事项:
替代继承
装饰器中的主要角色:
- 需要被装饰的类
- 装饰器类(实现接口,接口类作为属性引入)
1. 代码实现:
public interface Shape{
void draw();
}
public class Circle implement Shape {
@Ovierride
public void draw(){
sout "draw a Circle";
}
}
public class Rectangle implement Shape {
@Ovierride
public void draw(){
sout "draw a Rectangle";
}
}
public class DecoratorShape implement Shape {
private Shape shape;
public DecoratorShape(Shape shape){
this.shape = shape;
}
@Ovierride
public void draw(){
shape.draw();
sout "decorator set shape border is red";
}
}
public class DecoratorPatternDemo{
psvm{
Shape shape = new Rectangle();
Shape decoratorShape = new DecoratorShape(shape);
decoratorShape.draw();
}
}
2. Java中常见的装饰器模式
Java 中最著名的装饰者模式的应用,就是 java.io 包中的各种InputStream 、Reader和 Writer 的实现类了。