我们去花店买花送人的时候会首先选哪种花,比如送老婆选的红玫瑰,送妈妈的康乃馨等等,然后包装走人;如果你想送大一点的,那你就得买其他的去搭配,比如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();//输出什么呢?大家自己运行吧 }
示例可能没有那么贴切,但是要表达的意思是一致的,这样,花最终就得到了装饰后的结果