定义
装饰模式旨在通过装饰对象横向扩展被装饰对象的功能.
装饰模式和代理模式有些类似,但代理模式旨在屏蔽对原对象的访问,装饰模式旨在功能扩展.
实例
原对象具有绘制圆形的功能,现在想要增加为圆形上色的功能.即可通过装饰模式解决.如果增加子类,当需要不定期扩展的功能很多时,子类的数量会极速膨胀.
1.抽象构件类
public abstract class Component {
public abstract void drawCircle(); //绘制圆形
}
2.具体构件类(被装饰类)
public class ConcreteComponent extends Component{
@Override
public void drawCircle() {
System.out.println("圆形绘制中!!!");
}
}
3.抽象装饰类
public abstract class Decorator extends Component{
private Component component = null;
//构造函数传入Component
public Decorator(Component component){
this.component = component;
}
public void drawCircle() {
component.drawCircle();
}
}
4.具体装饰类
public class AddColorDecorator extends Decorator{
public AddColorDecorator(Component component) {
super(component);
}
public void addColor(String color){
System.out.println("绘制颜色为"+color+"!!!");
}
public void drawCircle(){
super.drawCircle();
this.addColor("红色");
}
}
5.运行
public class Client {
public static void main(String[] args) {
//创建具体被装饰对象
Component comp = new ConcreteComponent();
//传入被装饰对象构造装饰对象
comp = new AddColorDecorator(comp);
//通过装饰对象调用方法
comp.drawCircle();
}
}