2010-07-29 98 views
1

該模式的名稱是什麼?我想,這是一家工廠,但我不確定。什麼是該模式的名稱?

using System.Windows.Forms; 

    public class TreeNodeHelper 
    { 
     public TreeNode GetTreeNodeType1() 
     { 
      return new TreeNode("type1"); 
     } 

     public TreeNode GetTreeNodeType2() 
     { 
      return new TreeNode("type2"); 
     } 

     // etc 
    } 

TreeNodeHelper類返回TreeNode的不同實例。它只返回TreeNodes實例,沒有別的。

回答

2

它是一種工廠,但不是the工廠模式。另外請注意,工廠模式(或變體)通常只有一個方法,只有一個(或多個)參數可用來決定創建實例的類型,而不是兩個(或更多)參數,方法。

我也將方法重命名爲「CreateNodeInstance」或類似的東西。您正在創建和返回實例,而不是檢索類型。

編輯

不完全瞭解你的需求,一個簡單的修改是將沿

static public class TreeNodeHelper 
{ 
    static public TreeNode CreateNodeInstance(criterion) 
    { 
     if (criterion == xyz) 
     { 
      return new XyzTreeNode(); 
     } 
     else if (criterion == foo) 
     { 
      return new FooTreeNode(); 
     } 
     else if (etc...etc... 
    } 
} 

此線的東西將是factory method pattern的實現,而不是abstract factory pattern。後面的鏈接還包含C#中的示例,但我懷疑是否需要完整的抽象工廠實現。

+0

Willem,我該怎麼做(改變)以使其成爲工廠模式? – nik 2010-07-29 07:32:58

+0

@nik:更新了答案 – 2010-07-29 07:54:14

+0

Willem,好的,所以CreateNodeInstance在這裏調用'factory method'? – nik 2010-07-29 08:23:25

0

它創建並返回對象,所以它是Factory或Builder的一些變體。由於它返回簡單的對象,而不是複雜的對象,因此它是一個Factory變體。

+0

簡單對象是指與系統的某些其他部分或其他對象無關的對象? – nik 2010-07-29 07:33:45

+0

不是具有依賴關係的複合對象......關鍵在於它創建單個相對簡單的對象,而不是基於傳遞的參數以不同方式構建和構建複雜對象......這更像是一個Builder。 – kyoryu 2010-07-29 08:32:25

相關問題