設計模式:簡單工廠與策略模式
阿新 • • 發佈:2019-01-09
簡單工廠,真的是特別簡單的一個設計模式。
工廠方法內定義需要用到的方法的父類,
根據傳遞的引數來決定例項化何種子類物件。
//演算法的父類,抽象出返回結果的介面
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());
}
}