策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
下面用一个工厂模式和策略模式的对比进行说明策略模式
工厂模式:
public interface Operation { double GetResult(double a,double b); } public class AddOperation implements Operation { public double GetResult(double a, double b) { return a+b; } } public class SubOperation implements Operation { public double GetResult(double a, double b) { return a-b; } } public class factory { public static Operation creat(char c){ Operation op = null; switch(c){ case ‘+‘: op = new AddOperation(); break; case ‘-‘: op = new subOperation(); break; default: op = new AddOperation(); break; } return op; } } public class Test { public static void main(String[] args) { Operation op = factory.creat(‘+‘); System.out.println(op.GetResult(1.1, 2.2)); op = factory.creat(‘-‘); System.out.println(op.GetResult(1.1, 2.2)); } }策略模式:
public interface Operation { double getResult(double a,double b); } public class AddOperation implements Operation { public double getResult(double a, double b) { return a+b; } } public class SubOperation implements Operation { public double getResult(double a, double b) { return a-b; } } public class Strategy { Operation op; public Strategy(Operation op){ this.op = op; } public double getResult(double a,double b){ return op.getResult(a, b); } } public class Test { public static void main(String[] args) { AddOperation addOp = new AddOperation(); SubOperation subOp = new SubOperation(); Strategy addStrategy = new Strategy(addOp); System.out.println(addStrategy.getResult(1.1, 2.2)); Strategy subStrategy = new Strategy(subOp); System.out.println(subStrategy.getResult(1.1, 2.2)); } }
原文:http://blog.csdn.net/chenyiming_1990/article/details/22597277