gpt4 book ai didi

java设计模式的使用

转载 作者:行者123 更新时间:2023-12-01 11:10:57 26 4
gpt4 key购买 nike

这可能是一个重复的问题,但我正在学习不同的模式并尝试在我的代码中实现它们。

我试图了解在此示例中使用哪种模式。我正在考虑使用工厂模式,但这让我对给定的场景感到困惑。我有一个接口(interface) Shape和实现类RectangleSquare

RectangleSquare 类实现 Shape 接口(interface)中的所有方法。现在,我在 Square 类中有几个 get 和 set 方法。如果我以这种方式使用工厂模式,则会出现异常

public class Square implements Shape {  
public String getSomeField() {
return
}
public void setSomeField() {
//set something
}
}

public class ShapeFactory {
public static Shape getShape(String shape) {
if(shape.equals("rectangle") {
return new Rectangle();
} else {
return new Square();
}
}
}

我像这样实例化我的 Square 类:形状正方形 = ShapeFactory.getShape("square");

由于我有方法 setSomeField()getSomeField(),所以我遇到了异常

问题:

  1. 我需要在这里使用工厂模式还是任何其他模式?

  2. 我是否必须像这样实例化:Square square = (Square)ShapeFactory.getShape("square");

最佳答案

  1. 我不确定您需要在这里使用工厂模式,因为您的示例非常简单,但您当然可以。由于您的对象非常简单,您也可以在代码中使用 Shape s = new Square(); 。工厂模式最适合对象创建复杂的情况,或者工厂需要知道对象已创建的情况。例如,如果 ShapeFactory 必须知道创建了多少个不同类型的 Shape。

  2. 没有。我不知道您遇到了什么异常,但以下代码对我有用:

    public class Main {

    public interface Shape {
    public String getName();
    }

    public static class Square implements Shape {

    @Override
    public String getName() {
    return "I'm a Square";
    }
    }

    public static class Rectangle implements Shape {
    @Override
    public String getName() {
    return "I'm a Rectangle";
    }
    }

    public static class ShapeFactory {
    public Shape getShape(String shape) {
    if (shape.equals("rectangle")) {
    return new Rectangle();
    } else {
    return new Square();
    }
    }
    }

    public static void main(String[] args) throws IOException {
    ShapeFactory sf = new ShapeFactory();
    System.out.println(sf.getShape("rectangle").getName());
    System.out.println(sf.getShape("something else").getName());
    }
    }

它打印:

I'm a Rectangle
I'm a Square

关于java设计模式的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380657/

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