2007-07-24
(7)结构模式之Bridge模式
晚上,Y先生和Q女士在看电视。
Q女士:老公,我想喝点东西。
Y先生:想来点什么?
Q女士:嗯,牛奶或者果汁,要不啤酒也行,来冰镇的,或者不凉的吧!
Y先生: .... .... .... 你是想要 冰镇牛奶还是不冰镇牛奶还是冰镇啤酒还是不冰镇啤酒?
Q女士:什么乱七八糟的!我就喝一种,哎呀,现在我又想和点可乐了!
Y先生:你到底想喝什么呢?总得给我一个明确的答复吧?
Q女士:不是和你说了吗?就刚才那些。
Y先生:好吧,我们来理清一下思路,你要喝饮料,对吧?而且想喝冰镇或没有冰镇的,对吧?
Q女士:是啊,你太罗嗦了!我真的渴了。
Y先生:别急,我们先把你需要的东西用事物和行为来给区分开来:
java 代码
- public abstract class Drink {
- }
- class Milk extends Drink {
- }
- class Beer extends Drink {
- }
Y先生:好了,现在我们再定义一个抽象的行为:
java 代码
- public abstract class DrinkState {
- public abstract void showState();
- }
- class IceDrinkState extends DrinkState {
- public void showState() {
- // TODO Auto-generated method stub
- System.out.println("This is ice drink");
- }
- }
- class HotDrinkState extends DrinkState {
- public void showState() {
- // TODO Auto-generated method stub
- System.out.println("This is hot drink");
- }
- }
Q女士:嗯,你把“事物”和“行为”给分开了,看样子你好像要对他们进行组合?
Y先生:猜对了!下面,我得修改一下Drink:
java 代码
java 代码
- public abstract class Drink {
- public DrinkState drinkState;
- public Drink(DrinkState drinkState) {
- // TODO Auto-generated constructor stub
- this.drinkState = drinkState;
- }
- public abstract void showState();
- }
- class Milk extends Drink {
- public Milk(DrinkState drinkState) {
- super(drinkState);
- }
- public void showState() {
- // TODO Auto-generated method stub
- System.out.println("this is milk");
- drinkState.showState();
- }
- }
- class Beer extends Drink {
- public Beer(DrinkState drinkState) {
- super(drinkState);
- }
- public void showState() {
- // TODO Auto-generated method stub
- System.out.println("this is beer");
- drinkState.showState();
- }
- }
Q女士:看起来不错嘛!我如果要个冰镇的啤酒,就用如下:
java 代码
- public static void main(String[] args) {
- Drink drink = new Milk(new IceDrinkState());
- drink.showState();
- }
Y先生:嗯,不错!你看,我们“把事物和行为分离开来,让他们自由组合”,对于你这么BT的需求,是多么的方便啊!
Y先生被Q女士狂打... ...
发表评论
- 浏览: 144955 次

- 详细资料
搜索本博客
我的相册
tdd
共 3 张
共 3 张
最新评论
-
网站的静态页面生成方案
笑 喘 写道yananay 写道 把对 index.do 请求后的结果保存成一个 ...
-- by tianmo2008 -
网站的静态页面生成方案
我曾经尝试过在ASP.NET中做这样的事情,用某户访问某个页面时,先从配置里读取 ...
-- by 活靶子 -
网站的静态页面生成方案
对于CMS静态发布,我用的是用Veocity模板去 生产的,根据一定的业务逻辑去 ...
-- by pablo3518 -
聊聊大连新的残疾人制度
政府张口要钱,什么理由已经不重要了。。。
-- by issppt -
请先不要讨论细节好吗
[quote="ayis"][quote="kimmking"][quote=" ...
-- by gzstyxb






评论排行榜