策略模式——对象行为型模式
来源:互联网 发布:阿里云栖大会地址 编辑:程序博客网 时间:2024/05/22 08:11
一、意图
定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。本模式使得算法可独立于使用它的客户而变化。
二、适用性
以下情况可使用Strategy模式
- 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
- 需要使用一个算法的不同变体。例如,你可能会定义一些反应不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。
- 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的,与算法相关的数据结构。
- 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入他们各自的Strategy类中以替代这些条件语句。
三、结果
四、代码
public interface CalculateStrategy { /** * 按距离计算价格 * * @param km 公里 * @return 返回价格 */ int calculatePrice(int km);}
public class BusStrategy implements CalculateStrategy { @Override public int calculatePrice(int km) { int extraTotal = km - 10; int extraFactor = extraTotal / 5; int fraction = extraFactor % 5; int price = 1 + extraFactor * 1; return fraction > 0 ? ++price : price; }}
public class TaxiStrategy implements CalculateStrategy { @Override public int calculatePrice(int km) { return km*2; }}
public class SubwayStrategy implements CalculateStrategy { @Override public int calculatePrice(int km) { if (km <= 6) { return 3; } else if (km > 6 && km < 12) { return 4; } else if (km > 12 && km < 22) { return 5; } else if (km > 22 && km < 32) { return 6; } return 7; }}
public class PriceCalculator { CalculateStrategy mStrategy ; public void setStrategy(CalculateStrategy mStrategy) { this.mStrategy = mStrategy; } public int calculatePrice(int km){ return mStrategy.calculatePrice(km); }}
public class Client { public static void main(String[] args){ PriceCalculator priceCalculator = new PriceCalculator(); priceCalculator.setStrategy(new BusStrategy()); int busPrice =priceCalculator.calculatePrice(20); priceCalculator.setStrategy(new TaxiStrategy()); int taxiPrice = priceCalculator.calculatePrice(20); priceCalculator.setStrategy(new SubwayStrategy()); int subwayPrice = priceCalculator.calculatePrice(20); System.out.printf("bus:%d ,taxi:%d,subway:%d",busPrice,taxiPrice,subwayPrice); }}输出结果:bus:4 ,taxi:40,subway:5
0 0
- 策略模式——对象行为模式
- 策略模式(Strategy)——对象行为型模式
- 策略模式——对象行为型模式
- 对象行为型模式——策略模式(Strategy Pattern)
- Strategy 策略模式 --对象行为型模式
- 对象行为模式——策略模式(Strategy)
- 策略模式--对象行为模式
- 设计模式(一)——Strategy策略模式(对象行为型模式)
- 设计模式——策略模式(行为型模式)
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- 设计模式之七:Strategy(策略)—对象行为型模式
- STRATEGY(策略)——对象行为模式
- 行为型-策略模式
- 机器学习(一)线性回归
- Javascript(一) Javascript与HTML结合使用简单学习
- 京东评价系统海量数据存储设计
- C# 二进制BinaryFormatter进行序列化与反序列化
- Spring @Configuration用annotation装配spring
- 策略模式——对象行为型模式
- 潮流十年,初心未变
- *[Lintcode]Interval Sum区间最小数
- 如何使用爬虫采集搜狐汽车新车资讯
- Failed to apply plugin [id 'com.android.application'] 和 Could not find com.android.tools.build:gradl
- oracle 11G 执行计划管理
- mybatis常用jdbcType数据类型
- mysql权限
- HTML5 为何要引入Canvas?