Java设计模式之装饰者模式

  装饰者模式在我理解就是对象功能的封装和传递的过程。
  我们去花店买花送人的时候会首先选哪种花,比如送老婆选的红玫瑰,送妈妈的康乃馨等等,然后包装走人;如果你想送大一点的,那你就得买其他的去搭配,比如101朵玫瑰,外加一些荷兰百合,总之我们会买更多的花(在模式中我们认为有更多的操作)让它能够成为一束花,然后再选那种包装,不论哪种,最终我们得到的是带有包装的一朵花或者一束花。
  我们把打成花束和包装都叫做装饰,让一朵花经过不断的包装能有不同的表现。
 
  花有很多种,我们定义花的接口:
 
public interface 花{
     public void printCurrentStatus();//这个接口是指这个花在当前时间的状态,是花?                                           //还是花束?还是已经包装好了?
  }


  我们要买的玫瑰或者康乃馨:
 
public class 玫瑰 implements 花{
     public void printCurrentStatus(){
System.out.println("选好一朵玫瑰花")
     }
}



  然后我们进行装饰,第一个装饰就是把花打花束:
 
public class 打成花束 implements 花{
     private 花 object;
     
     public 打成花束(花 object){
        this.object = object;
     }

     public void printCurrentStatus(){
          object.printCurrentStatus();
          System.out.println("打好了花束");
     }
        
  }


   下一个装饰是进行包装:
   
public class 包装 implements 花{
     private 花 object;
     
     public 包装(花 object){
        this.object = object;
     }

     public void printCurrentStatus(){
          object.printCurrentStatus();
          System.out.println("打好了包装");
     }
        
  }

  好了,在回顾一下我们买花的过程吧:
 
public static void main(String[] args){
      花   花object  = new 玫瑰();//选好的玫瑰
      花object = new  包装(花object);//如果我们就买一支,那直接打包吧
      花object.printCurrentStatus();//输出: 选好一朵玫瑰花
                                               打好了包装

      花   花object1  = new 玫瑰();//选好的玫瑰
      花object1 = new 打成花束(花object1);//打成花束
      花object1 = new  包装(花object1);//包装
      花object1.printCurrentStatus();//输出什么呢?大家自己运行吧

  }


  示例可能没有那么贴切,但是要表达的意思是一致的,这样,花最终就得到了装饰后的结果

  

猜你喜欢

转载自201110044304.iteye.com/blog/2029323
今日推荐