2013-10-17 156 views
0

說我有A類:初始化模式?

public class A 
{ 
    private B _b; 

    public class A(B b) 
    { 
    Assert.That(b != null); 
    _b = b; 
    } 
} 

和對象B需要一些複雜的初始化,如:

b.Prop1 = ... 
b.Prop2 = ... 
b.Prop3 = ... 

int answerToSomeComplexFormula = PerformComplexFormula(); 

b.Prop4 = answerToSomeCopmlexFormula 

etc... 

我不想在構造函數中執行此初始化。是否有某種模式的名稱,用於描述返回具有複雜初始化的對象?例如:

public class BInitializer 
{ 
    public B Create() 
    { 
     B b = new B(); 
     // set up properties 
     return b; 
    } 
} 

BInitializer initializer = new BInitializer(); 
B b = initializer.Create(); 

A a = new A(b) 

謝謝!

+1

工廠模式 – clcto

回答

3

您使用BInitializer的解決方案非常好,它被稱爲Factory Method設計模式。

在這裏你可以找到一些共同創建型設計模式:http://sourcemaking.com/creational_patterns

+0

有趣。我的印象是工廠模式的唯一責任是或多或少地立即返回一個具體的實現。如果我用原始問題的工廠模式,我想我可以有一個'AFactory',作爲它的Create()方法的一部分,實例化並初始化一個B對象,然後返回一個新的A(b)?那仍然被認爲是一個工廠,對吧? – jrahhali

+0

你可以這樣做。此外,您可以使AFactory將BInitializer對象作爲構造函數中的參數,以使其更加鬆散耦合。一個總是試圖想想如果我的實現:1.易於使用2.易於理解3.(單位)可測試。 – Pellared

+0

爲什麼不完全放棄AFactory,並且讓A將BInitializer作爲其構造函數的一部分(並調用_b = bInitializer.Create())?在這種情況下A會被認爲是可測試的嗎?這有什麼缺點? – jrahhali