简单工厂,真的是特别简单的一个设计模式。
工厂方法内定义需要用到的方法的父类,
根据传递的参数来决定实例化何种子类对象。
//算法的父类,抽象出返回结果的接口
public interface Operation {
public abstract double getResult(double a,double b);
}
//工厂类,用于生产相应的算法子类
public class OperationFactory {
public Operation CreateOperation(String str){
Operation ope=null;
switch (str){
case "+":
ope=new OperationAdd();
break;
case "-":
ope=new OperationSub();
break;
}
return ope;
}
}
//算法子类,由工厂类创建,重写父类中的虚函数
public class OperationAdd implements Operation {
@Override
public double getResult(double a, double b) {
return a+b;
}
}
策略模式
摘自百度百科
策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
策略模式的优点有:策略模式提供了管理相关的算法族的办法、策略模式提供了可以替换继承关系的办法、使用策略模式可以避免使用多重条件转移语句。
Strategy提供一个接口,供算法实现
ConcreteStrategy 具体实现类
Context 维护一个Strategy对象,使用ConcreteStrategy的方法,动态设置 需要运行的方法
Strategy.java
public interface Strategy {
public String printAnswer();
}
ConcreteStrategy.java
public class ConcreteStrategy1 implements Strategy {
@Override
public String printAnswer() {
return "this is method 1";
}
}
Context.java
public class Context {
private Strategy strategy;
Context(Strategy strategy){
this.strategy=strategy;
}
public String getResult(){
return strategy.printAnswer();
}
}
Client.java
public class Client {
public static void main(String args[]){
Context context=null;
context=new Context(new ConcreteStrategy1());
System.out.println(context.getResult());
}
}
策略模式与简单工厂结合
Context.java
public class Context {
private Strategy strategy;
Context(String type){
switch (type){
case "1":
strategy=new ConcreteStrategy1();
break;
case "2":
strategy=new ConcreteStrategy2();
break;
}
}
public String getResult(){
return strategy.printAnswer();
}
}
Client.java
public class Client {
public static void main(String args[]){
Context context=null;
context=new Context("1");
System.out.println(context.getResult());
context=new Context("2");
System.out.println(context.getResult());
}
}