设计模式:策略模式
策略模式在集合类的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));//除法DivideStrategy divideStrategy = new DivideStrategy();enviroment = new Enviroment(divideStrategy);System.out.println(enviroment.caculate(3, 4));}}
?
具体的客户端调用。
?
再看一个例子: