gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:27:49 25 4
gpt4 key购买 nike

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

  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com