原创 装饰者设计模式实例(第一次自己写博文,欢迎指正交流)

以汽车为例子,对汽车进行染色是必须的步骤,但是如果有些车主还喜欢对车把手或者车内部进行不同的染色(这当然是选择性的步骤),那么就非常适合用装饰者设计模式来设计。

设计的代码如下

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("紫色");
 }

}

 

 

posted @ 2011-12-01 11:00  Flying Dreams  阅读(110)  评论(0编辑  收藏  举报