2013-08-22 2 views
0

я реализовал метод фабрики следующим образом:Фабрика метод implementaion

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() будет вызываться из его производных classes.I может пойти на следующих подходах:

Подход 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); 
    } 

} 

Какой подход лучше? Нужно ли защищать свойства и методы? Каковы плюсы и минусы подходов?

ответ

0

Метод 1

Обычно, но не всегда вы хотите, чтобы наследовать методы и не данных. Функция f1() построит obj с использованием фабрики, поэтому нет необходимости иметь установленный метод. f1() может оставаться защищенным, и каждый производный класс может вызвать f1(), чтобы получить свой собственный экземпляр объекта, но если вам нужно поделиться этим конкретным экземпляром с другими, вы просто создали бы открытый метод getObj внутри MyClass, который мог бы возвращать константу ссылку в C++ или final в java этого типа или копию в C++ или клон в Java (не уверен, что C# точно такая же), но все же у вас есть частный экземпляр obj в MyClass.

+0

Woah! стена текста. Не могли бы вы немного сломать его? –

Смежные вопросы