2012-09-10 37 views
0

假設我有一個數字集合,例如。 A = [2,3,4,5,6,7,8,9,10,11,12]。如何使用設計模式解決規則分組集合?

還有幾條規則: a:數字是3的倍數; b:數字是5的倍數;

規矩,很容易原始集合分爲三個:

A_3 = [3, 6, 9, 12] 
A_5 = [5, 10] 
A_other = [2, 4, 7, 8, 11] 

我想知道,設計收集和規則的類來達到目標​​的最佳方式:

  1. 很容易添加或減少規則
  2. 集合中元素的類型可以很容易地更改

謝謝。

+1

家庭作業?如果是家庭作業,您可能需要標記它。 – Saintali

+0

你想用任何特定的語言來處理嗎?在C#或VB.Net中解決這個問題可能需要一個不同的方法來解決它,例如Clojure。 – Kjartan

+0

@Saintali這不是一個家庭作業。我只是想它 –

回答

7

根據我你應該使用strategy pattern這是當你的算法可以與算法的不同變化互換時通常使用的。

例如,

,如果你有一個創建一個像你陣列,在某些情況下的代碼, 你可能要挑3和在其他情況下的倍數,則可能 要挑5的倍數。

策略模式如下

聲明一個抽象基類的算法的方法,其然後通過繼承混凝土類實現通常被實現。在代碼中的某個時刻,決定具體策略的相關性,稍後它將被實例化並在相關的地方使用。

我不確定這是否符合您的要求。

我不能斷定你只能使用這個,我一直相信在TIMTOWTDI

0

假設你想用C#,我就開始了與這樣的:

// General interface to filter out whatever you want, given a list: 
public interface IFilterElements<T> 
{ 
    IEnumerable<T> Filter(IEnumerable<T> elementList); 
} 


// An example imlementation - add more of these as required: 
class FilterElementsThatAreEven<T> : IFilterElements<T> 
{ 
    public IEnumerable<T> Filter(IEnumerable<T> elementList) 
    { 
     // Some implementation to return a sorted set/list 
    } 
} 

在您的調用方法,你可以這樣做:

// List to filter 
IEnumerable<int> myListOfInts = new int[]{1, 2, 3, 4, 5, 6}; 

// Instantiation of the implementation - also where you specify the 
// type of data to filter (could be of class "MagicLemur" instead of int) 
IFilterElements<int> myIntFilter = new FilterElementsThatAreEven<int>(); 

var filteredList = myIntFilter.FilterElementsThatAreEven();