设计模式笔记--策略模式
2013-04-05 20:47
399 查看
一:前言
清明无意中翻出一位老师介绍我看的设计模式电子书,没想到已经参加工作十个月了,因为在学校的时候主要做的是底层网络通信,没有使用过java,当然现在科班出身的本科生都要学java的吧,记得当时自己觉得学习java没用,几乎堂堂翘课,跑去图书馆看史蒂文的《TCP/IP详解》系列、《unix高级环境编程》等底层网络通信的书籍,考试前一天看了下教材,就考试去了,成绩还不错。找工作的时候也是通过底层网络的技术获得目前公司的offer,然而阴差阳错的我被安排到了java研发岗位上,当然抵触肯定会有的,相信有相同经历的朋友会有同感。好吧,公司的那句话说的很棒,“永远不变的是变化”,几乎从零开始学习java,从C转换为java开发,其中有很多东西要学习,问了很多小白的问题,你懂的,我不懂啊,小白就小白吧,一时小白被人鄙视总比不懂装懂强,幸好有师傅铁大师带,从零开始教我,非常感谢他,是他把我领进了门。在研究团队项目的时候,发现有很多地方设计的相当巧妙,扩展性相当好,今天看到cbf4life著作的《设计模式》书籍时有种醍醐灌顶的感觉,原来这些都是设计模式,java开发框架的精华。
二:strategy
pattern
水杯就是一个strategy pattern,一个水杯可以用来装白开水、牛奶、beer等,对外只提供drink服务,它自己并不关心里面装是什么,它只是一个容器。先定义一个接口water:
package com.netboy.demo; /** * @功能: 水的接口 * @版本号: * @作者: netboy Email:wang_lin_n@163.com * @时间: 2013-4-5 下午08:17:27 * @例子: */ public interface Water { public void taste(); }
子类白开水:
package com.netboy.demo; /** * @功能: * @版本号: * @作者: netboy Email:wang_lin_n@163.com * @时间: 2013-4-5 下午08:20:17 * @例子: */ public class GoodWater implements Water { @Override public void taste() { System.out.println("白开水,是最健康的。"); } }
子类牛奶:
package com.netboy.demo; /** * @功能: * @版本号: * @作者: netboy Email:wang_lin_n@163.com * @时间: 2013-4-5 下午08:21:50 * @例子: */ public class MilkWater implements Water { @Override public void taste() { System.out.println("牛奶,富含营养"); } }
子类beer:
package com.netboy.demo; /** * @功能: 啤酒类 * @版本号: * @作者: netboy Email:wang_lin_n@163.com * @时间: 2013-4-5 下午08:23:03 * @例子: */ public class BeerWater implements Water { @Override public void taste() { System.out.println("啤酒,适量为佳"); } }
水杯类,用来为人提供服务:
package com.netboy.demo; import java.util.ArrayList; import java.util.List; /** * @功能: 水杯,用来承装饮料,提供服务 * @版本号: * @作者: netboy Email:wang_lin_n@163.com * @时间: 2013-4-5 下午08:24:44 * @例子: */ public class Cup { private List<Water> waterList = new ArrayList<Water>(); public void service() { if(waterList.size() <= 0) { System.out.println("sorry,the cup is empty"); return; } for(Water water : waterList) { water.taste(); } } public void add(Water water) { this.waterList.add(water); } }
定义一个人,去实现饮料和水杯的价值:
package com.netboy.demo; /** * @功能: * @版本号: * @作者: netboy Email:wang_lin_n@163.com * @时间: 2013-4-5 下午08:16:20 * @例子: */ public class Man { public static void main(String[] args) { System.out.println("hello,this is strategy pattern"); Water milk = new MilkWater(); Water beer = new BeerWater(); Water whiteWater = new GoodWater(); Cup cup = new Cup(); //向容器中添加白开水 cup.add(whiteWater); cup.service(); //添加其它饮料 cup.add(beer); cup.add(milk); cup.service(); } }
运行如下:
*******************************************************************************************
*******************************************************************************************
对于水杯来说,里面装的是什么,它并不关心,它只是为调用它的类提供service()服务,这样很方便进行扩展,如果饮料类型变化,我们只需要定义一个新类实现water接口,然后可以通过spring将其注入到cup类的waterList中,那么waterlist中的所有water子类的taste()方法都会被调用。
上面的杯子类有点小bug,应该添加上清空方法:
public class Cup {
private List<Water> waterList = new ArrayList<Water>();
public void service() {
if(waterList.size() <= 0) {
System.out.println("sorry,the cup is empty");
return;
}
for(Water water : waterList) {
water.taste();
}
}
public void add(Water water) {
this.waterList.add(water);
}
/**
* 清空杯子
*/
public void clearCup() {
waterList.clear();
System.out.println("杯子已经清空了");
}
}
执行类:
public class Man {
public static void main(String[] args) {
System.out.println("hello,this is strategy pattern");
Water milk = new MilkWater();
Water beer = new BeerWater();
Water whiteWater = new GoodWater();
Cup cup = new Cup();
//向容器中添加白开水
cup.add(whiteWater);
cup.service();
//添加其它饮料
cup.add(beer);
cup.add(milk);
cup.service();
//clear the cup
cup.clearCup();
}
}
相关文章推荐
- 设计模式学习笔记--策略(Strategy)模式
- 策略设计模式--学习笔记
- java设计模式学习笔记之策略模式
- 【学习笔记javascript设计模式与开发实践(策略模式)----5】
- 设计模式心得笔记--简单工厂和策略模式
- 设计模式学习笔记-策略模式
- Java编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
- 设计模式笔记 22. Strategy 策略模式(行为型模式)
- 【设计模式学习笔记二十二】【行为模式】【策略模式(Strategy)】
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- 设计模式学习笔记-策略模式
- 设计模式学习笔记2-----策略模式
- Head First 设计模式(1)- 策略模式 笔记
- 设计模式学习笔记之(二、策略模式)
- 设计模式 笔记 策略模式 Strategy
- 设计模式笔记—策略模式
- 设计模式心得笔记--简单工厂和策略模式
- 设计模式学习笔记之策略模式
- 设计模式之策略模式——极客学院学习笔记
- Java设计模式笔记之策略模式