Design patterns 工厂方法实现
我实施了以下工厂方法:Design patterns 工厂方法实现,design-patterns,Design Patterns,我实施了以下工厂方法: class A { } class A1:A { } class A2:A { } static class Factory { public static A GetInstance(int i) { if (i == 1) return new A1(); else if (i == 2) return new A2(); else
class A
{
}
class A1:A
{
}
class A2:A
{
}
static class Factory
{
public static A GetInstance(int i)
{
if (i == 1)
return new A1();
else if (i == 2)
return new A2();
else
return null;
}
}
我想在下面的类方法f1()中使用工厂。方法f1()将从其派生类调用。我可以采用以下方法:
方法1:
class MyClass
{
private A obj = null;
public void f1()
{
obj = Factory.GetInstance(1);
}
}
方法2:
class MyClass2
{
protected A obj { get; set; }
protected void f1()
{
obj = Factory.GetInstance(1);
}
}
哪种方法更好?我需要保护属性和方法吗?
这些方法的优缺点是什么?方法1
通常但并非总是希望继承方法而不是数据。f1()函数将使用工厂构造obj,因此无需使用set方法。F1()可以保持受保护,每个派生类可以调用F1()来获得自己的对象实例,但是如果需要与其他人共享这个特定实例,则只需在MyClass中创建一个GETOBJ公共方法,可以返回C++中的const引用或java中的最终引用或C++中的副本或java中的克隆。(不确定c#是否完全相同),但在MyClass中仍然有您的obj私有实例。Woah!文本墙。您可以稍微拆分一下吗?