gpt4 book ai didi

java - Java 问题中的工厂方法模式示例

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:44 26 4
gpt4 key购买 nike

我正在尝试用 Java 创建一个非常简单的工厂方法设计模式示例。我不太了解 Java,一般来说我是编程新手,但我需要想出一个用 Java 实现的基本 FactoryMethod 示例。以下是我想出的。我确定有很多错误,我显然缺少一些构造函数,而且我对抽象类和接口(interface)感到困惑。你能指出我的错误并更正我的代码并附上解释吗?预先感谢您的时间和帮助。

public abstract class Person 
{
public void createPerson(){ }
}

public class Male extends Person
{
@Override
public void createPerson()
{
System.out.print("a man has been created");
}
}

public class Female extends Person
{
@Override
public void createPerson()
{
System.out.print("a woman has been created");
}
}

public class PersonFactory
{
public static Person makePerson(String x) // I have no Person constructor in
{ // the actual abstract person class so
if(x=="male") // is this valid here?
{
Male man=new Male();
return man;
}
else
{
Female woman=new Female();
return woman;
}
}
}


public class Test
{
public static void main(String[] args)
{
Person y= new Person(makePerson("male")); // definitely doing smth wrong here
Person z= new Person(makePerson("female")); // yup, here as well
}
}

最佳答案

简而言之,您的版本中有几个问题已在下面更正:

  1. createPerson 方法没用。
  2. 你调用工厂方法的方式是错误的。
  3. 您在工厂方法中使用 == 而不是 .equals

我增强了您的 Person 类以添加由 Male 和 Female 类共享的成员字段,以演示如何使用共享公共(public)抽象构造函数。

public abstract class Person {   
protected final String name;
public Person(String name) {
this.name = name;
}
}

public class Male extends Person {
public Male(String name) {
super(name);
}
}

public class Female extends Person {
public Female(String name) {
super(name);
}
}

public class PersonFactory
{
public static Person makePerson(String gender, String name)
{
if(gender.equals("male"))
{
Male man=new Male(name);
return man;
}
else
{
Female woman=new Female(name);
return woman;
}
}
}

public class Test
{
public static void main(String[] args)
{
Person y= PersonFactory.makePerson("male", "bob"));
Person z= new PersonFactory.makePerson("female", "janet"));
}
}

关于java - Java 问题中的工厂方法模式示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567182/

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