java - 具有继承类的抽象工厂模式

标签 java inheritance abstract-factory

我想实现抽象工厂模式。 我有三门课

  1. 父类(super class) (SC)
  2. 子类(childA,应继承自 sc)
  3. 子类(childB,也应继承自 sc)

到目前为止我所做的是为父类(super class)实现抽象工厂设计模式。我还没有办理遗产继承事宜。我不知道如何用两个子类实现该模式。我需要添加什么?

抽象工厂

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");
    }

}

最佳答案

这篇文章解释了创建具有继承的抽象工厂的一种非常详细的方法:http://www.oodesign.com/abstract-factory-pattern.html

如果您的 SC 父类(super class)也是抽象的,您可以轻松采用以下内容:

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,萨宾

关于java - 具有继承类的抽象工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29770301/

相关文章:

java - 重定向使用和 POST 参数

c++ - C<T> 派生自T,安全吗?

java - 如果我可以在创建者类中拥有多个工厂方法,为什么我需要抽象工厂模式?

java - java 中的工厂模式和泛型

java - Random() 构造函数参数

java - XHTML 到 PDF 使用 Flying Saucer 如何缓存 css

java - 使用 netbeans 和场景生成器运行程序之间的显示问题

使用 Object.create 与使用 new 的 JavaScript 继承

python - Python中将对象从类转换为子类的方法

php - 没有方法重载的 PHP 中的抽象工厂