Decorate允许向一个现有对象添加动态新功能并且不改变其结构。
- 作用:动态扩展功能
- 优点:装饰类和被装饰类可以独立发展,不会耦合。
- 缺点:多层装饰比较复杂
例:
被装饰方抽象角色:
public interface IShape{
void draw();
}
具体的装饰方实现,可以有多个不同实现类
public class circle implements IShape{
public void draw(){
System.out.println("画一个圆!");
}
}
public class rhombus implements IShape{
public void draw(){
System.out.println("画一个菱形!");
}
}
装饰抽象角色
public abstract class DecorateShape implements IShape{
private IShape graph;//被装饰对象,即要动态追加功能的对象
public DecorateShape(IShape graph){
this.graph = graph;
}
public void draw(){
graph.draw();
}
}
具体装饰角色
public class PinkDecorateShape extends DecorateShape(){
public PinkDecorateShape(IShape graph){
super(graph);
}
public void draw(){
System.out.println("用粉色画");
super.draw();//调用父类被覆盖的方法
}
}
测试类
public static void main(String[] args){
IShape circle =new cirlce();//节点流
IShape graph = new PinkDecorateShape();//过滤流
graph.draw();
IShape graph1 = new PinkDecorateShape(graph1);
}