继承 类 的抽象工厂模式

abstract factory pattern with inherit classes

我想实现抽象工厂模式。 我有三个 classes

  1. 超级class(SC)
  2. A child class(childA,应继承自sc)
  3. A child class (childB, 也应继承sc)

到目前为止,我所做的是为 superclass 实现抽象工厂设计模式。我还没有处理继承。我不知道如何用两个 subclasses 来实现这个模式。我需要添加什么?

抽象工厂

public abstract class AbstractFactory {

    public abstract SC createNewSC();

}

SCConcreteFactory

public class SCConcreteFactory extends AbstractFactory {

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

抽象SC

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

SC

public class SC extends AbstractSC{

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

}

在这个 post 中解释了一种使用继承创建抽象工厂的非常详细的方法: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。

HTH,萨宾

需要分别为Child和Child实现两个工厂,例如:

public class ChildAFactory extends AbstractFactory {

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

public class ChildBFactory extends AbstractFactory {

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