首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单工厂设计模式传递工厂对象的目的(第一)?

简单工厂设计模式传递工厂对象的目的(第一)?
EN

Stack Overflow用户
提问于 2017-11-28 15:11:57
回答 4查看 176关注 0票数 1

我来自C++背景,最近开始学习设计模式。

我面临着来自Head First Design模式的这段代码的问题:

链接:PizzaStore.java

代码语言:javascript
复制
public class PizzaStore {
SimplePizzaFactory factory;

public PizzaStore(SimplePizzaFactory factory) { 
    this.factory = factory;
}

public Pizza orderPizza(String type) {
    Pizza pizza;

    pizza = factory.createPizza(type);

    pizza.prepare();
    pizza.bake();
    pizza.cut();
    pizza.box();

    return pizza;
} 
}

请帮助我解决以下疑问:

在PizzaStore类的构造函数中传递一个工厂对象有什么相关性?

  • PizzaStore类已经包含一个SimplePizzaFactory对象。
  • 传递的对象不使用任何数据(需要由PizzaStore构造函数复制)初始化: 公共PizzaStore(SimplePizzaFactory工厂){ this.factory =工厂; }

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-28 15:20:57

这是Java不同于C++的地方之一。当你打字时

代码语言:javascript
复制
SimplePizzaFactory factory;

它不像在C++中那样,它隐式调用一个无参数构造函数并创建一个对象。在Java中,factory只是null。这是因为Java中的变量更类似于C++中的指针。以上内容类似于

代码语言:javascript
复制
SimplePizzaFactory *factory;

你会意识到这根本没有创造价值。它只是做了一个指针,没有指向任何有用的东西。如果你想给它一个价值,你必须这样做

代码语言:javascript
复制
factory = new SimpleFactory(...);

或者,如果您有另一个指针,则可以将该指针的值传递给它,因此它将指向相同的值。

代码语言:javascript
复制
SimpleFactory *otherFactory = ...;
...
factory = otherFactory;

它在Java中就是这样工作的。简而言之,Java变量只是对对象的引用,就像C++指针(但使用了垃圾收集)。要使用引用,首先需要为其赋值。

票数 2
EN

Stack Overflow用户

发布于 2017-11-28 15:19:59

PizzaStore类已经包含一个SimplePizzaFactory对象。

嗯,PizzaStore有一个SimplePizzaFactory类型的SimplePizzaFactory属性。在PizzaStore构造函数中,该属性是引用构造函数参数的初始化。这是Java代码中常见的模式。

传递的对象不使用任何数据(需要由PizzaStore构造函数复制)初始化。

不需要在构造函数中添加初始化代码,而是说明SimplePizzaFactory已经初始化。该工厂不是复制的,而是由PizzaStore属性引用的,因此在执行构造函数之后,PizzaStore中的工厂是一个已经初始化的对象。

票数 3
EN

Stack Overflow用户

发布于 2017-11-28 15:22:23

在Java中,“一切都是一个对象”并需要显式实例化,这就是为什么您可以将PizzaStore类中的PizzaStore看作一个指针,它需要与传递给构造函数的参数相同(需要有new SimplePizzaFactory();),假设一个c++指针作为参数传递给构造函数,在调用PizzaStore‘构造函数之前,应该已经在其他地方实例化了指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47534853

复制
相关文章

相似问题

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