Strategy学习笔记
来源:互联网 发布:网页美工属于web什么 编辑:程序博客网 时间:2024/06/05 23:58
首先看一下策略模式的UML图
Strategy通常是一个接口,其中定义抽象的算法接口,具体实现具体策略子类(ConcreteStrategy)来实现。
Context定义了对策略类的算法方法的调用以完成具体的逻辑,Context对Strategy类的调用不管是如何实现的,只要可以完成功能即可。
ConcreteStrategy完成策略接口中定义的方法,不同的实现子类对Strategy抽象层的实现也不相同。
一个简单的例子,一个商场中可以有不同的购物区,每个区域在不同的时节和情况下会有相应的折扣
首先建立一个抽象Market类包含购物区的一些基本属性和方法
package com.akwolf.strategymarket;public abstract class Market {protected Onsale onsale;public Market() {// 默认无折扣onsale = new OnsaleNone();}/** * 各个商场用来结算最终金额的方法 * * @param price 商品总价 * @return */public abstract float calculatePrice(float price);public Onsale getOnsale() {return onsale;}public void setOnsale(Onsale onsale) {this.onsale = onsale;}}
让不同的购物区实现Market以实现一个简单的从原始价得到打折后价格的功能
package com.akwolf.strategymarket;public class ClothesMarket extends Market {@Overridepublic float calculatePrice(float price) {return onsale.saleRate() * price;}}
FoodMarket:
package com.akwolf.strategymarket;public class FoodMarket extends Market {@Overridepublic float calculatePrice(float price) {return price * onsale.saleRate();}}
建立打折的接口(Onsale)相当于Stratety接口,供不同的打折类型拓展,因为打折的类型可能很多,也具有不确定性
package com.akwolf.strategymarket;public interface Onsale {public float saleRate();}
剩下就是让不同的打折类型拓展自打折接口,以便在不同的购物区被使用
package com.akwolf.strategymarket;/** * 秋季打折 * * @author zhanghua * */public class OnsaleAutumn implements Onsale {@Overridepublic float saleRate() {return 0.88f;}}
package com.akwolf.strategymarket;/** * 春节打折 * * @author zhanghua * */public class OnsaleSpring implements Onsale {@Overridepublic float saleRate() {return 0.5f;}}
建立一个类测试一些运行效果
package com.akwolf.strategymarket;public class MainTest {public static void main(String[] args) {Market market ;Onsale onsale ;//秋天了收获的季节,食物和衣服都打折onsale = new OnsaleAutumn() ;market = new ClothesMarket() ;//买了一件衣服得到打折后的价格market.setOnsale(onsale) ;System.out.println(market.calculatePrice(50)); //在食品区买了150元的食品得到打折后的价格market = new FoodMarket() ;market.setOnsale(onsale) ;System.out.println(market.calculatePrice(150));System.out.println("---------------");//春节在食品区买东西享受春节优惠,onsale = new OnsaleSpring() ;market = new FoodMarket() ;market.setOnsale(onsale) ;System.out.println(market.calculatePrice(300));//衣服不打折了market = new ClothesMarket() ;System.out.println(market.calculatePrice(200));}}
源码已经上传,有需要的童鞋可以看一下http://download.csdn.net/source/3571017
初次发表文章,难免有的地方说的不够通顺和一些对策略模式认识不够透彻的地方,欢迎各位拍砖一起讨论学习,共同进步!!!
- Strategy模式学习笔记
- Strategy学习笔记
- 深入浅出设计模式-学习笔记(1) Strategy
- Design Patterns学习笔记:Strategy策略模式
- Design Patterns学习笔记21:Strategy
- COSMIC MEASUREMENT STRATEGY PHASE学习笔记
- 设计模式学习笔记--策略(Strategy)模式
- 设计模式学习笔记--Strategy、State
- 大卫的Design Patterns学习笔记21:Strategy
- 设计模式学习笔记二十三(Strategy策略模式)
- 设计模式学习笔记(三)—-Strategy策略模式
- Java设计模式(学习笔记)--Strategy 模式
- 设计模式学习笔记(三)—Strategy策略模式
- 设计模式C++学习笔记之一(Strategy策略模式)
- 设计模式学习笔记(六)之策略模式(Strategy)
- 设计模式C++学习笔记之一(Strategy策略模式)
- java 设计模式学习笔记十五 strategy 策略设计模式
- 设计模式C++学习笔记之一(Strategy策略模式)
- 关于Groovy里面元编程(MetaProgramming)的一点总结
- VIM使用系列之一——配置VIM下编程和代码阅读环境
- 特殊符号
- 抽象类和接口的区别,例子经典
- 豆瓣FM-Hacker——豆瓣FM播放列表补全计划
- Strategy学习笔记
- 2011年9月的困惑
- 小菜鸟报道
- How to use map (STL)?-
- DOS显示320*200 256色位图
- 乔布斯辞职 苹果向右Google向左
- PCB各层含义
- VC++ 的类中使用函数指针的小例子,通过函数指针调用不同的函数
- HCI Blog