首先感谢大话设计模式的作者,让自己有机会能学习到这些东西自己记一下一遍以后重复看时有新的理解,メモ
策略模式—->定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化
不会影响到用算法的客户。
在这张图里 对应自己敲得程序
Context <—>OperationFactoryContext.java
Strategy <—>operation.java
ConcreteStrategyA <—>Add.java Sub.java Mul.java 即 加,减,乘
AlgoritlmInterface() <—>getResult(double numA,double numB)
代码如下—>
OperatonFactoryContext .java
package factory;
import jisuanqi.Add;
import jisuanqi.Mul;
import jisuanqi.Sub;
import jisuanqi.operation;
public class OperatonFactoryContext {
private operation oper = null;
public OperatonFactoryContext (String key) {
switch (key) {
case "+":
oper = new Add();
break;
case "-":
oper = new Sub();
break;
case "*":
oper = new Mul();
break;
default:
System.out.println("計算できぬ");
break;
}
}
public double getResult(double numA ,double numB) {
return oper.getResult(numA,numB);
}
}
operation.java
package jisuanqi;
public abstract class operation {
public double getResult(double numA,double numB) {
return 0;
}
}
Add.java Sub.java Mul.java 继承上面的抽象类
package jisuanqi;
import jisuanqi.operation;
public class Add extends operation{
@Override
public double getResult(double numA,double numB) {
// TODO Auto-generated method stub
return (numA + numB);
}
}
package jisuanqi;
public class Mul extends operation {
@Override
public double getResult(double numA,double numB) {
// TODO Auto-generated method stub
return numA * numB;
}
}
package jisuanqi;
public class Sub extends operation {
@Override
public double getResult(double numA,double numB) {
// TODO Auto-generated method stub
return (numA - numB);
}
}
测试类
package client;
import factory.OperatonFactoryContext;
public class courstom {
public static void main(String[] args) {
// TODO Auto-generated method stub
OperatonFactoryContext opf = new OperatonFactoryContext("-");
System.out.println("結果=" + opf.getResult(1.22,2));
}
}
策略模式是一种定义一系列算法的方法,从概念看,所有的这些算法完成的都是相同的工作,只是
实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
基本的策略模式中,选择所用具体实现的责任由客户端对象承担,并转给策略模式的context对象
与简单工厂模式结合后具体实现的职责由Context来承担,减轻了客户端的职责。
参考—>《大话之设计模式》