策略模式定義了一系列演算法,並將每個演算法封裝起來,使他們可以相互替換,且演算法的變化不會影響到使用演算法的客戶。需要設計乙個介面,為一系列實現類提供統一的方法,多個實現類實現該介面,設計乙個抽象類(可有可無,屬於輔助類),提供輔助函式
/**策略模式的決定權在使用者,系統本身提供不同演算法的實現,新增或者刪除演算法,對各種演算法做封裝。因此,策略模式多用在演算法決策系統中,外部使用者只需要決定用哪個演算法即可。* 統一介面
*/public inte***ce icalculator
/***
輔助類*/
public abstract class abstractcalculator
}/**
* 實現類
*/public class plus extends abstractcalculator implements icalculator
}/**
* 實現類
*/public class minus extends abstractcalculator implements icalculator
}/**
* 實現類
*/public class multiply extends abstractcalculator implements icalculator
}/**
* 測試類
*/public class strategytest
}
策略模式的優點
(1)策略模式提供了管理相關的演算法族的辦法。策略類的等級結構定義了乙個演算法或行為族。恰當使用繼承可以把公共的**移到父類裡面,從而避免**重複。
(2)使用策略模式可以避免使用多重條件(if-else)語句。多重條件語句不易維護,它把採取哪一種演算法或採取哪一種行為的邏輯與演算法或行為的邏輯混合在一起,統統列在乙個多重條件語句裡面,比使用繼承的辦法還要原始和落後。
策略模式的缺點
(1)客戶端必須知道所有的策略類,並自行決定使用哪乙個策略類。這就意味著客戶端必須理解這些演算法的區別,以便適時選擇恰當的演算法類。換言之,策略模式只適用於客戶端知道演算法或行為的情況。
(2)由於策略模式把每個具體的策略實現都單獨封裝成為類,如果備選的策略很多的話,那麼物件的數目就會很可觀。
設計模式 Strategy 策略
意圖 定義一系列的演算法,把他們乙個個封裝起來,並且使他們可以互相替換,使演算法可以獨立於使用它的客戶變化而變化 暫無理解,以後再回來編輯,先貼 taxstrategy.h pragma once class taxstrategy cntax.h pragma once include taxst...
設計模式 策略模式(Strategy)
策略模式 定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化不會影響到使用演算法的使用者。封裝變化點是物件導向的一種很重要的思維方式 strategy類,定義所有支援的演算法的公共介面 抽象演算法類 abstract class strategy 演算法方法 public ...
設計模式 策略模式(strategy)
策略模式定義了一系列演算法,並將每個演算法封裝起來,使他們可以相互替換,且演算法的變化不會影響到使用演算法的客戶。需要設計乙個介面,為一系列實現類提供統一的方法,多個實現類實現該介面,設計乙個抽象類 可有可無,屬於輔助類 提供輔助函式 抽象折扣類 public inte ce memberstrat...