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

我遇到了Head First Design Patterns中的这段代码的问题:

链接:PizzaStore.java

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构造函数复制):

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


}


谢谢

最佳答案

这是Java与C ++不同的地方。当您键入

SimplePizzaFactory factory;


这与C ++中隐式调用无参数构造函数并创建对象的情况不同。在Java中,factory将简称为null。这是因为Java中的变量与C ++中的指针更相似。上面类似于

SimplePizzaFactory *factory;


您会意识到这根本不会创造任何价值。它只是使一个指针指向没有任何用处。如果您想给它一个价值,就必须做

factory = new SimpleFactory(...);


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

SimpleFactory *otherFactory = ...;
...
factory = otherFactory;


这就是它在Java中的工作方式。简而言之,Java变量只是对对象的引用,就像C ++指针一样(但带有垃圾回收)。要使用参考,首先需要为其分配一个值。

10-07 19:14
查看更多