1.19(設計模式)策略模式

策略模式,定義一組算法(代碼),將它們封裝起來,使其能夠相互替換。html

 

策略模式首先要針對不一樣的狀況(算法、代碼)定義不一樣的策略類。算法

 

首先看個一段代碼ide

public class Test {
    public static void main(String[] args) {
        insertCode();
    }
    
    
    public static void insertCode() {
        System.out.println("start");
        //此處插入一段代碼
        System.out.println("end");
    }
}

要想插入代碼有什麼方法呢,咱們能夠定義個Insert接口,在其中定義insertCode方法。測試

而後具體的類去實現它,並將該類做爲參數傳遞給main中的inserCode方法。this

 

插入接口spa

public interface Insert {
    void insertCode();
}

 

插入接口實現類code

public class HelloWroldCode implements Insert {

    @Override
    public void insertCode() {
        // TODO Auto-generated method stub
        System.out.println("Hello World!");
    }

}

 

測試htm

public class Test {
    public static void main(String[] args) {
        insertCode(new HelloWroldCode());
    }
    
    
    public static void insertCode(Insert insertCode) {
        System.out.println("start");
        insertCode.insertCode();//此處插入一段代碼
        System.out.println("end");
    }
}

須要變換插入代碼,只須要將insertCode方法的參數修改便可,針對不一樣的代碼都封裝成一個類。對象

插入的那段代碼能夠看作是策略,策略能夠是不一樣的代碼,算法等。blog

策略模式須要策略對象,就是上述的Insert的實現類。

 

 

下面看下一個加減的例子,加減能夠看作是兩種策略。

咱們把加減抽取出來,造成兩種策略。

策略接口

public interface Strategy {
    public int doOperation(int num1, int num2);
}

 

加操做

public class OperationAdd implements Strategy{

    @Override
    public int doOperation(int num1, int num2) {
        // TODO Auto-generated method stub
        return num1 + num2;
    }

}

 

減操做

public class OperationSubstract implements Strategy{

    @Override
    public int doOperation(int num1, int num2) {
        // TODO Auto-generated method stub
        return num1 - num2;
    }

}

 

使用策略的Context類,根據策略的不一樣會執行不一樣的操做。

public class Context {
    private Strategy strategy;//策略對象決定最後操做 public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    
    public int doOperation(int num1, int num2) {
        return strategy.doOperation(num1, num2);//調用策略對象的doOperation方法
    }
}

 

Main

public class Main {
    public static void main(String[] args) {
        //初始化context對象,並指定策略對象爲加操做
        Context context = new Context(new OperationAdd());
        System.out.println("4 + 3 = " + context.doOperation(4, 3));
        //並指定策略對象爲減操做
        context = new Context(new OperationSubstract());
        System.out.println("4 - 3 = " + context.doOperation(4, 3));
    }
}
運行結果:
4 + 3 = 7
4 - 3 = 1

 

 

參考資料:

https://www.runoob.com/design-pattern/strategy-pattern.html

https://www.cnblogs.com/zuoxiaolong/p/pattern8.html

相關文章
相關標籤/搜索