概念:策略模式定義了一系列的演算法,並將每一個演算法封裝起來,而且使它們還可以相互替換。策略模式讓演算法獨立于使用它的客戶而獨立變化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable.
Strategy lets the algorithm vary independently from clients that use it.)抽象策略角色:策略類,通常由一個介面或者抽象類別實現。
概念:
策略模式定義了一系列的演算法,並將每一個演算法封裝起來,而且使它們還可以相互替換。策略模式讓演算法獨立于使用它的客戶而獨立變化。
(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable.
Strategy lets the algorithm vary independently from clients that use it.)
抽象策略角色:
策略類,通常由一個介面或者抽象類別實現。
步驟:
(①②步比較菜,忽略。有異議者聯繫!)
①首先定義一個策略介面
②然後再寫出你需要的實現類(這裡稱為“計謀”)去繼承①策略介面。
③計謀有了,那還要有錦囊裝
/**
* @author wonter
* <b>描述:</b>計謀有了,那還要有錦囊裝 <br>
* <b>郵件:</b> yiyu1@163.com <br>
*/
public class Box {
//①策略介面
private IStrategy straegy;
//向錦囊中傳入計謀
//這裡類型是策略IStrategy介面,但傳入的則是“實現”介面的計謀。
public Box(IStrategy jimou){
//改寫策略
this.straegy = jimou;
}
//使用計謀
public void operate(){
this.straegy.operate();
}
}
④使用計謀
/**
* @author wonter
* <b>描述:</b>計謀有了,那還要有錦囊裝 <br>
* <b>郵件:</b> yiyu1@163.com <br>
*/
public class YunZhao {
public static void main(String[] args) {
//將錦囊聲明出來
Context context;
System.out.println("—— 錦囊妙計一 ——");
//向錦囊拿出**計謀
context = new Context(new first());
//執行計謀
context.operate();
System.out.println("—— 錦囊妙計二 ——");
//向錦囊拿出**計謀
context = new Context(new second());
//執行計謀
context.operate();
System.out.println("—— 以下待為擴展 ——");
System.out.println("—— ... .... ——");
}
好處:
這就是策略模式,高內聚低耦合的特點也表現出來了。
還有一個就是擴展性,也就是 OCP原則,只要修改 Context.java 就可以了。
提供了一種替代繼承的方法,而且既保持了繼承的優點(代碼重用)還比繼承更靈活(演算法獨立,可以任意擴展)。
避免程式中使用多重條件轉移語句,使系統更靈活,並易於擴展。
/**
* @author wonter
* <b>描述:</b> 一天學一個模式 更新中,請關注我的博客! <br>
* <b>博客:</b> http://www.cnblogs.com/Javame <br>
* <b>郵件:</b> yiyu1@163.com <br>
*/