首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java设计模式

使用java设计模式
EN

Stack Overflow用户
提问于 2015-09-03 16:11:06
回答 2查看 203关注 0票数 0

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

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

Rectangle & Square类实现了Shape接口中的所有方法。现在,我在Square类中有两个get和set方法。如果我以这种方式使用工厂模式,就会得到异常。

代码语言:javascript
复制
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类如下:Shape square = ShapeFactory.getShape("square");

因为我有setSomeField()getSomeField()方法,所以我会得到异常

问题

  1. 我需要在这里使用工厂模式还是其他模式?
  2. 我是否必须像这样实例化:Square square = (Square)ShapeFactory.getShape("square");
EN

回答 2

Stack Overflow用户

发布于 2015-09-03 19:12:55

  1. 我不确定是否需要在这里使用工厂模式,因为您的示例非常简单,但您当然可以。由于您的对象非常简单,所以您也可以在代码中更好地使用Shape s = new Square();。如果对象的创建非常复杂,或者工厂需要知道创建了一个对象,那么工厂模式最适合这种情况。例如,如果ShapeFactory必须知道创建了多少个不同类型的形状。
  2. 不是的。我不知道您得到的是什么异常,但下面的代码适用于我: 公共类Main {公共接口形状{公共字符串getName();}公共静态类广场实现形状{@覆盖公共字符串getName() {返回“I‘a Square";}}公共静态类矩形实现形状{@覆盖公共字符串getName() {返回”I’s矩形“;}公共静态类ShapeFactory {公共形状getShape(字符串形状){ if (shape.equals(“矩形”)){返回新矩形();})公共静态空洞主(String[] args)抛出IOException { ShapeFactory sf =新的ShapeFactory();ShapeFactory System.out.println(sf.getShape(“其他东西”).getName();}}

它打印:

代码语言:javascript
复制
I'm a Rectangle
I'm a Square
票数 1
EN

Stack Overflow用户

发布于 2015-09-04 07:42:59

实际上,这取决于你的设计。任何一种主要的造物模式--都可以根据您的情况需要来完成。如果您不需要每次都获得一个固定对象,那么构建器将为您提供一种流畅的方法来构造Shape对象。查看您的代码(并假设您最终可能有许多参数)如下

代码语言:javascript
复制
 public String getSomeField();
 public void setSomeField(); 

这是一个有待考虑的选择。一个简单的例子是Builder将如何更好地控制施工过程:

代码语言:javascript
复制
 public Rectangle getRectangle() {
    return new
            Rectangle.RectangleBuilder()
            .length(60)
            .width(30)                
            .build();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32380657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档