读书人

设计方式:策略模式

发布时间: 2012-10-31 14:37:32 作者: rapoo

设计模式:策略模式

策略模式在集合类的Comparator中大量应用

设计方式:策略模式

设计方式:策略模式

设计方式:策略模式

策略模式也强调了一个设计原则:多使用组合,少用继承。

策略模式就是使用变量来强调“多使用组合”

设计方式:策略模式

设计方式:策略模式

设计方式:策略模式

下面定义一个使用策略模式来实现加减乘除

?

package com.test.strategy;/** * 抽象策略角色 * */public interface Strategy {public int calculate(int a,int b);}

上面定义了一个抽象策略角色,其中定义了一个caculate方法?。

?

package com.test.strategy;/** * 具体策略角色 * */public class AddStrategy implements Strategy {public int calculate(int a, int b) {return a + b;}}

?

package com.test.strategy;/** * 具体策略角色 */public class SubtractStrategy implements Strategy {public int calculate(int a, int b) {return a - b;}}

?

?

package com.test.strategy;/** * 具体策略角色 */public class MultiplyStrategy implements Strategy {public int calculate(int a, int b) {return a * b;}}

?

?

package com.test.strategy;/** * 具体策略角色 */public class DivideStrategy implements Strategy {public int calculate(int a, int b) {return a / b;}}

?

上面定义了四个具体策略解决,实现了抽象策略角色接口,并实现了相应的方法,用来做加减乘除。

package com.test.strategy;//环境角色public class Enviroment {private Strategy strategy;public Enviroment(Strategy strategy) {this.strategy = strategy;}public Strategy getStrategy() {return strategy;}public void setStrategy(Strategy strategy) {this.strategy = strategy;}public int caculate(int a,int b){return strategy.calculate(a, b);}}

?

环境类用来维护及调用策略类。

package com.test.strategy;public class Client {public static void main(String[] args) {//加法AddStrategy addStrategy = new AddStrategy();Enviroment enviroment = new Enviroment(addStrategy);System.out.println(enviroment.caculate(3, 4));//减法SubtractStrategy subtractStrategy = new SubtractStrategy();enviroment = new Enviroment(subtractStrategy);System.out.println(enviroment.caculate(3, 4));//乘法MultiplyStrategy multiplyStrategy = new MultiplyStrategy();enviroment = new Enviroment(multiplyStrategy);System.out.println(enviroment.caculate(3, 4));//除—ivideStrategy divideStrategy = new DivideStrategy();enviroment = new Enviroment(divideStrategy);System.out.println(enviroment.caculate(3, 4));}}

?

具体的客户端调用。

设计方式:策略模式

设计方式:策略模式

?

再看一个例子:

设计方式:策略模式

读书人网 >软件开发

热点推荐