JAVA設計模式(十七)設計模式之策略設計模式

2021-09-24 14:25:24 字數 1815 閱讀 3297

本章講解設計模式中策略設計模式的相關知識

1.概念

在策略模式(strategy pattern)中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。

在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。

比如,諸葛亮是三國時期的謀士。它每個策略都是乙個錦囊。該如何出兵都寫在錦囊當中。假設有三種錦囊(強攻、偷襲、埋伏),這三種方式所需要兵將和流程都是不同的。

傳統的變成思維如下:

package strategy;

public class oldstrategy

//諸葛亮的策略

public static void zhugestrategy(string type)else if("偷襲".equals(type)) else if("埋伏".equals(type))

}}

如果一旦諸葛亮的錦囊多了起來,每乙個錦囊所需要的流程複雜起來,那麼將非常不利於維護和擴充套件。

2.策略模式的實現思路

1)建立相應工程

2)建立策略介面及其具體的實現類

package strategy;

/** * 錦囊策略介面

* @author jwang

* */

public inte***ce strategy

強攻策略:

package strategy;

/** * 強攻策略

* @author jwang

* */

public class qstartegy implements strategy

}

埋伏策略:

package strategy;

/** * 埋伏策略

* @author jwang

* */

public class mstartegy implements strategy

}

偷襲策略:

package strategy;

/** * 偷襲策略

* @author jwang

* */

public class tstartegy implements strategy

}

3)建立諸葛亮管理這些策略

package strategy;

/** * 諸葛亮類,負責管理策略

* @author jwang

* */

public class zgl

//諸葛亮使用錦囊

public void shenjimiaosuan()

}

4)編寫測試**進行測試

package strategy;

public class test

}

測試結果如下:

採用不同的策略可以獲得不同的打仗方法!

這就巧妙的避免了if...else的負擔,提高了程式的擴充套件性。 

設計模式之 十七 狀態模式State

由簡單的開始會比較好理解狀態模式的作用,先來看乙個例子,如果您有乙個只能順時針轉動的瓦斯開關,轉動一次的狀態為off small fire medium fire與large fire,您如何在程式中控制狀態的變化與行為呢?乙個最簡單的方式就是用if.else或是switch流程來控制,例如 這個方...

java設計模式之原型設計模式

原型設計模式 顧名思義,該模式的思想就是將乙個物件作為原型,對其進行複製 轉殖,產生乙個和原物件類似的新物件 設計思路 第一步 建立乙個類prototypemode,實現cloneable介面 第二步 在prototypemode中定義shallowclone方法 淺複製物件實現 和deepclon...

java設計模式之裝飾設計模式

裝飾設計模式 裝飾設計模式就是給乙個物件增加一些新的功能,而且是動態的。要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項 設計思路 第一步 定義介面action,在介面中提供乙個方法work 第二步 定義被裝飾類child,實現介面action 第三步 定義裝飾類adult,實現...