晚上,Y先生和Q女士在看电视。

Q女士:老公,我想喝点东西。

Y先生:想来点什么?

Q女士:嗯,牛奶或者果汁,要不啤酒也行,来冰镇的,或者不凉的吧!

Y先生: .... .... .... 你是想要 冰镇牛奶还是不冰镇牛奶还是冰镇啤酒还是不冰镇啤酒?

Q女士:什么乱七八糟的!我就喝一种,哎呀,现在我又想和点可乐了!

Y先生:你到底想喝什么呢?总得给我一个明确的答复吧?

Q女士:不是和你说了吗?就刚才那些。

Y先生:好吧,我们来理清一下思路,你要喝饮料,对吧?而且想喝冰镇或没有冰镇的,对吧?

Q女士:是啊,你太罗嗦了!我真的渴了。

Y先生:别急,我们先把你需要的东西用事物和行为来给区分开来:

java 代码
  1. public abstract class Drink {          
  2.        
  3. }   
  4.   
  5.   
  6. class Milk extends Drink {   
  7.        
  8.        
  9. }   
  10.   
  11. class Beer extends Drink {   
  12.        
  13.        
  14. }  

Y先生:好了,现在我们再定义一个抽象的行为:

java 代码
  1. public abstract class DrinkState {   
  2.        
  3.     public abstract void showState();   
  4. }   
  5.   
  6. class IceDrinkState extends DrinkState {   
  7.   
  8.     public void showState() {   
  9.         // TODO Auto-generated method stub   
  10.         System.out.println("This is ice drink");   
  11.     }   
  12.        
  13. }   
  14.   
  15. class HotDrinkState extends DrinkState {   
  16.   
  17.     public void showState() {   
  18.         // TODO Auto-generated method stub   
  19.         System.out.println("This is hot drink");   
  20.     }   
  21.        
  22. }  

Q女士:嗯,你把“事物”和“行为”给分开了,看样子你好像要对他们进行组合?

Y先生:猜对了!下面,我得修改一下Drink:

java 代码
java 代码
  1. public abstract class Drink {          
  2.        
  3.     public DrinkState drinkState;   
  4.        
  5.        
  6.     public Drink(DrinkState drinkState) {   
  7.         // TODO Auto-generated constructor stub   
  8.         this.drinkState = drinkState;   
  9.     }   
  10.        
  11.     public abstract void showState();   
  12.        
  13. }   
  14.   
  15.   
  16. class Milk extends Drink {   
  17.        
  18.     public Milk(DrinkState drinkState) {   
  19.         super(drinkState);   
  20.     }   
  21.        
  22.     public void showState() {   
  23.         // TODO Auto-generated method stub   
  24.         System.out.println("this is milk");   
  25.         drinkState.showState();   
  26.     }   
  27.        
  28.        
  29. }   
  30.   
  31. class Beer extends Drink {   
  32.        
  33.     public Beer(DrinkState drinkState) {   
  34.         super(drinkState);   
  35.     }   
  36.        
  37.     public void showState() {   
  38.         // TODO Auto-generated method stub   
  39.         System.out.println("this is beer");   
  40.         drinkState.showState();   
  41.     }   
  42.        
  43.        
  44. }  

Q女士:看起来不错嘛!我如果要个冰镇的啤酒,就用如下:

java 代码
  1. public static void main(String[] args) {   
  2.        
  3.     Drink drink = new Milk(new IceDrinkState());   
  4.     drink.showState();   
  5.        
  6. }  

Y先生:嗯,不错!你看,我们“把事物和行为分离开来,让他们自由组合”,对于你这么BT的需求,是多么的方便啊!

Y先生被Q女士狂打... ...

评论
发表评论

您还没有登录,请登录后发表评论

yananay
搜索本博客
我的相册
D35bafa8-5bf0-475f-aa06-16f3080557a1-thumb
tdd
共 3 张
存档
最新评论