原创 装饰者设计模式实例(第一次自己写博文,欢迎指正交流)
以汽车为例子,对汽车进行染色是必须的步骤,但是如果有些车主还喜欢对车把手或者车内部进行不同的染色(这当然是选择性的步骤),那么就非常适合用装饰者设计模式来设计。
设计的代码如下
package car.paint;
public interface Car {
public void paint(String color);
}
package car.paint;
public class ConcreteCar implements Car {
private String color ;
public void paint(String color) {
// TODO Auto-generated method stub
System.out.println("这是必须做的事情,或者是以前已经完成的事情。" +
"无法更改。\n已经把车身刷漆为" + color);
}
}
package car.paint;
public abstract class Decorator {
private Car car;
private String color;
public void paint(String color){
}
public Decorator(Car car) {
super();
this.car = car;
}
}
package car.paint;
public class DoorHandlerDecorator extends Decorator {
public void paint(String color){
System.out.println("有些人喜欢把车把手染色,现在将它染为" + color);
}
public DoorHandlerDecorator(Car car) {
super(car);
// TODO Auto-generated constructor stub
}
}
package car.paint;
public class InsideDecorator extends Decorator {
public void paint(String color){
System.out.println("有些人喜欢把车里面染色,现在将它染为" + color);
}
public InsideDecorator(Car car) {
super(car);
// TODO Auto-generated constructor stub
}
}
package car.paint;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car = new ConcreteCar();
car.paint("白色");
//后来发现有些车主还喜欢对车把手和车内部进行颜色的装饰
Decorator decorator = new DoorHandlerDecorator(car);
decorator.paint("红色");
decorator = new InsideDecorator(car);
decorator.paint("紫色");
}
}