目前,我有一個標準的策略模式實現,簡化:策略模式替代實現
public interface IStrategy
{
IList<Dog> GetDogs();
}
public class DogStrategy: IStrategy
{
public IList<Dog> GetDogs()
{
return new List<Dog>();
}
}
我也有一個使用策略AA級:
public class DogCollection
{
private IStrategy strategy;
public IStrategy Strategy
{
get { return strategy; }
set
{
if (strategy == null || value.GetType() != strategy.GetType())
{
strategy = value;
//do stuff
}
}
}
問題:什麼我發現在2個地方實施了這種模式,接口開始擴散一點。這是可管理和靈活的,但我知道同事會因文件太多而感到不安 - 他們不喜歡設計模式。此外,我需要使用策略的一些共同邏輯,以便集合需要有一個它繼承的抽象類。
我想,而不是使用所有這些接口讓DogCollection從包含額外的邏輯泛型集合繼承:
public class DogCollection : GenericCollection<Dog>
我可以使用Loader屬性,而不是一個IStrategy財產。然後,我可以刪除這兩種策略模式的各種文件:
public abstract class GenericCollection<T>
{
private Func<IList<T>> loader;
public Func<IList<T>> Loader
{
get { return loader; }
set
{
loader = value;
//do stuff
}
}
}
而是通過各種條件instatitiating具體戰略的實施,並在DogCollection制定戰略制定戰略的,我只想創建包含程序,以獲取靜態類不同的狗並分配裝載機屬性。然後可以使用加載器屬性在請求時返回列表。
哪個是首選?爲什麼?
我同意,我現在正在刪除大量代碼。羞愧戰略模式的每個例子都使用舊式界面方法。順便說一句,我曾說過替代實施,而不是替代模式。 –