2015-05-06 36 views
1

我只是想知道这些创建实例的方法是否是“更好”的解决方案,如果是的话,为什么?创建实例的方法是“更好”的方法,为什么?

method 1: MyClass myClass = new MyClass(); 
method 2: MyClass myClass2 = MyClass.Create(); 


public class MyClass 
{ 
    public string Name { get; set; } 

    public static MyClass Create() 
    { 
     return new MyClass(); 
    } 
} 

此致

+1

这两种方法在你的情况没有区别。 –

+1

有时候,一种方式更好,另一种方式更好。两种方法之间的区分充其量是主观的。当没有东西强迫选择时,方法2允许构造函数成为实现细节(这有时更清晰)。通常我会使用构造函数,除非我有充分的理由去使用辅助方法。 – Richard

+2

@RahulTripathi - 在这种情况下没有区别,但是'Create'方法通常可以有更多逻辑来返回派生自'MyClass'的类型,甚至是'null' - 构造函数不能返回。 –

回答

0

方法2可以是更灵活,例如实施时工厂方法模式

public abstract class MyClass { 
    ... 
    protected MyClass() { 
    } 

    public static MyClass Create() { 
     if (...) 
     return new MyClassOne(); 
     else if (...) 
     return new MyClassTwo(); 
     ... 
    } 

    public abctract void DoSomething(); 
    } 

    ... 

    MyClass my = MyClass.Create(); 
    // I have no need to choose which concrete class (MyClassOne, MyClassTwo etc.) 
    // will do something for me 
    my.DoSomething(); 
+0

谢谢你的回答:)我会把它放在船上。 – adminSoftDK

相关问题