2015-04-21 5 views
1

Я хочу реализовать абстрактный заводской шаблон. У меня есть три классаабстрактный шаблон фабрики с классами наследования

  1. суперкласса (SC)
  2. Класс ребенка (childâ, наследуют от СБН)
  3. дочерний класс (childB, должен также наследовать от СБН)

Что я сделал до сих пор, это реализация абстрактного шаблона проектирования фабрики для суперкласса. Я еще не наследовал наследство. Я не знаю, как реализовать шаблон с двумя подклассами. Что мне нужно добавить?

AbstractFactory

public abstract class AbstractFactory { 

    public abstract SC createNewSC(); 

} 

SCConcreteFactory

public class SCConcreteFactory extends AbstractFactory { 

    @Override 
    public SC createNewSC() { 
     return new SC(); 
    } 
} 

AbstractSC

public abstract class AbstractSC{ 
    public abstract void doStuff(); 
} 

SC

public class SC extends AbstractSC{ 

    @Override 
    public void doStuff() { 
     System.out.println("Hello World"); 
    } 

} 

ответ

1

один очень подробный способ создать абстрактные фабрики с наследованием объясняется в этом посте: http://www.oodesign.com/abstract-factory-pattern.html

Если SC суперкласс также абстрактный, вы могли бы легко принять это:

public abstract class AbstractFactory { 
    public abstract SC sc(); 
} 

public class ChildAFactory extends AbstractFactory { 
    public SC sc(){ return new ChildA();} 
} 

public class ChildBFactory extends AbstractFactory { 
    public SC sc(){ return new ChildB();} 
} 

И как указано в вышеупомянутой статье:

class FactoryMaker{ 
    private static AbstractFactory pf=null; 
    static AbstractFactory getFactory(String choice){ 
    if(choice.equals("a")){ 
     pf=new ChildAFactory(); 
    }else if(choice.equals("b")){ 
     pf=new ChildBFactory(); 
    } return pf; 
    } 
} 

// Client 
public class Client{ 
    public static void main(String args[]){ 
    AbstractFactory pf= FactoryMaker.getFactory("a"); 
    SC sc = pf.sc(); // ChildA is initialized 
    } 
} 

Существует несколько способов использования абстрактной фабрики - это зависит от ваших требований. Это очень простой подход и может измениться с учетом ваших требований. Например, вышеприведенное решение пытается скрыть конкретную реализацию. Клиент знает только SC.

НТН, Сабина

1

Вам нужно реализовать два завода для childâ и ChildB соответственно, например:

public class ChildAFactory extends AbstractFactory { 

    @Override 
    public SC createNewSC() { 
     return new ChildA(); 
    } 
} 

public class ChildBFactory extends AbstractFactory { 

    @Override 
    public SC createNewSC() { 
     return new ChildB(); 
    } 
} 
Смежные вопросы