0

我已经实现了工厂方法如下:

 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() 将从其派生类中调用。我可以通过以下方法:

方法一:

class MyClass
{
    private A obj = null;
    public void f1()
    {
        obj = Factory.GetInstance(1);
    }

}

方法二:

class MyClass2
{
    protected  A obj { get; set; }
    protected void f1()
    {
        obj = Factory.GetInstance(1);
    }

}

哪种方法更好?我需要保护属性和方法吗?这些方法的优缺点是什么?

4

1 回答 1

0

方法一

通常但并非总是希望继承方法而不是数据。f1() 函数将使用工厂构造 obj,因此不需要 set 方法。f1() 可以保持受保护,每个派生类都可以调用 f1() 来获取他们自己的对象实例,但是如果您需要与其他人共享这个特定实例,您只需在 MyClass 中创建一个 getObj 公共方法,该方法可以返回一个 const这种类型的 c++ 中的引用或 java 中的 final 或 c++ 中的副本或 Java 中的克隆(不确定 c# 是否完全相同),但在 MyClass 中仍然有您的 obj 私有实例。

于 2013-08-22T06:38:56.083 回答