装饰模式:是对一个类进行各种功能的丰富,使用Decorator模式扩充类的功能会比用子类生成的方式更加的灵活。
装饰者与被装饰者拥有共同的超类。
类图:
我家有座山,山下有座石雕厂,石雕厂有打磨石狮子的机器
抽象构建角色(被装饰者):石雕厂Carved类
具体构建角色(被装饰者的初始状态):雕刻石狮子LionCarved
装饰角色(持有构件的实例):机器 Machine
装饰类:CarvedHead CarvedBody CarvedTail
Carved类
package decorator2;
public abstract class Carved {
public abstract String toCarved();
}
LionCarved类
package decorator2;
public class LionCarved extends Carved{
public String toCarved(){
return "开始雕刻石狮子";
}
}
Machine类
package decorator2;
public abstract class Machine extends Carved{
}
CarvedHead类
package decorator2;
public class CarvedHead extends Machine{
Carved carved;
public CarvedHead(Carved carved){
this.carved = carved;
}
public String toCarved(){
return "先要雕刻头部";
}
}
CarvedBody类
public class CarvedBody extends Machine{
Carved carved;
public CarvedBody(Carved carved) {
this.carved = carved;
}
public String toCarved(){
return "然后雕刻身体";
}
}
CarvedTail类
package decorator2;
public class CarvedTail extends Carved{
Carved carved;
public CarvedTail(Carved carved){
this.carved = carved;
}
public String toCarved(){
return "最后雕刻尾巴";
}
}
package decorator2;
public class Test {
public static void main(String args[]){
Carved carved = new LionCarved();
System.out.println(carved.toCarved());
CarvedHead carvedHead = new CarvedHead(carved);
System.out.println(carvedHead.toCarved());
CarvedBody carvedBody = new CarvedBody(carved);
System.out.println(carvedBody.toCarved());
CarvedTail carvedTail = new CarvedTail(carved);
System.out.println(carvedTail.toCarved());
}
}
运行结果如下: