2012-02-17 49 views
2

在戰略模式中,只做戰略和技能中的一些邏輯可以保留一些自己的代碼,它仍然是戰略模式嗎?戰略模式,這是否正確

示例:我使用策略模式來影響元素在我的雙向鏈表中的排序方式。 我所做的只是簡單地將策略模式表示爲如果它希望在給定元素之後插入,然後循環所有元素,然後在使策略模式發回錯誤的元素之前插入新元素。

或者是否必須在策略模式中進行所有排序才能使其成爲「純」策略模式?

public interface IInsertStrategy<T> { 
public boolean insertAfter(T insertValue, T testValue); 
} 

和附加代碼

public void add(T value) 
{ 
    DoublyLinkedNode<T> workingNode = head; 

    // Loop though nodes, to and with the tail 
    while(workingNode.next != null) 
    { 
     workingNode = workingNode.next; 
     /* Keep going until the strategy is not true any more 
     * or until we have the last node. */ 
     if(workingNode.next == null || 
      !insertStrategy.insertAfter(value, workingNode.value)) 
     { 
      workingNode.previous.append(value); 
      break; 
     } 
    } 
} 

回答

2

它的清潔讓你的策略算法在IInsertStrategy實施。想象一下,如果你想出第三種算法,但由於add函數中存在一些衝突而無法正確執行。您最終會觸及代碼的兩個部分,這首先破壞了插入算法的抽象目的。

+0

這就是我在哪裏想的,謝謝! – Androme 2012-02-17 06:56:47