首先看一下策略模式的uml圖
strategy通常是乙個介面,其中定義抽象的演算法介面,具體實現具體策略子類(concretestrategy)來實現。
context定義了對策略類的演算法方法的呼叫以完成具體的邏輯,context對strategy類的呼叫不管是如何實現的,只要可以完成功能即可。
concretestrategy完成策略介面中定義的方法,不同的實現子類對strategy抽象層的實現也不相同。
乙個簡單的例子,乙個商場中可以有不同的購物區,每個區域在不同的時節和情況下會有相應的折扣
首先建立乙個抽象market類包含購物區的一些基本屬性和方法
package com.akwolf.strategymarket;
public abstract class market
/*** 各個商場用來結算最終金額的方法
* * @param price 商品總價
* @return
*/public abstract float calculateprice(float price);
public onsale getonsale()
public void setonsale(onsale onsale)
}
讓不同的購物區實現market以實現乙個簡單的從原始價得到打折後**的功能
package com.akwolf.strategymarket;
public class clothesmarket extends market
}
foodmarket:
package com.akwolf.strategymarket;
public class foodmarket extends market
}
建立打折的介面(onsale)相當於stratety介面,供不同的打折型別拓展,因為打折的型別可能很多,也具有不確定性
package com.akwolf.strategymarket;
public inte***ce onsale
剩下就是讓不同的打折型別拓展自打折介面,以便在不同的購物區被使用
package com.akwolf.strategymarket;
/** * 秋季打折
* * @author zhanghua
* */
public class onsaleautumn implements onsale
}
package com.akwolf.strategymarket;
/** * 春節打折
* * @author zhanghua
* */
public class onsalespring implements onsale
}
建立乙個類測試一些執行效果
package com.akwolf.strategymarket;
public class maintest
}
Strategy學習筆記
首先看一下策略模式的uml圖 strategy通常是乙個介面,其中定義抽象的演算法介面,具體實現具體策略子類 concretestrategy 來實現。context定義了對策略類的演算法方法的呼叫以完成具體的邏輯,context對strategy類的呼叫不管是如何實現的,只要可以完成功能即可。co...
設計模式學習筆記 策略模式(Strategy)
1.特點 將一系列演算法逐個封裝並可相互替換,易於切換 理解 擴充套件。優點 1 提供了管理相關演算法族的方法。2 可以避免使用多重條件轉移語句。缺點 1 必須知道所有的具體策略類及它們的區別.2 生成許多的策略類。2.概念 3.類圖 4.實現 策略類,定義了所有支援的演算法的公共介面 public...
策略模式 Strategy 行為筆記
一 涉及角色 1 環境角色 context 持有strategy類 抽象演算法類 引用 2 抽象策略 strategy 介面 or 抽象類 3 具體策略 concretestrategy 包裝相關演算法或行為 注意 共用 公共行為 可以 上移到 strategy 抽象類 二 何時 使用 何種 具體策...