面试题
这个问题可以使用工厂方法模式来解决。工厂方法模式定义了一个用于创建对象的接口,但是由子类决定实例化哪个类。这样,可以将对象的实例化延迟到子类中,从而使客户端代码依赖于接口而不是具体的类。
以下是一个简单的 Java 代码示例,演示了如何使用工厂方法模式来创建比萨店的不同风格和类型的比萨:
javaCopy code// 比萨接口
interface Pizza {
void prepare();
void bake();
void cut();
void box();
}
// 具体比萨类 - 厦门风格
class XiamenCheesePizza implements Pizza {
@Override
public void prepare() {
System.out.println("准备厦门芝士比萨");
}
@Override
public void bake() {
System.out.println("烘烤厦门芝士比萨");
}
@Override
public void cut() {
System.out.println("切片厦门芝士比萨");
}
@Override
public void box() {
System.out.println("装盒厦门芝士比萨");
}
}
// 具体比萨类 - 深圳风格
class ShenzhenVegetarianPizza implements Pizza {
@Override
public void prepare() {
System.out.println("准备深圳素食比萨");
}
@Override
public void bake() {
System.out.println("烘烤深圳素食比萨");
}
@Override
public void cut() {
System.out.println("切片深圳素食比萨");
}
@Override
public void box() {
System.out.println("装盒深圳素食比萨");
}
}
// 抽象比萨工厂接口
interface PizzaFactory {
Pizza createPizza();
}
// 具体比萨工厂类 - 厦门风格
class XiamenPizzaFactory implements PizzaFactory {
@Override
public Pizza createPizza() {
return new XiamenCheesePizza();
}
}
// 具体比萨工厂类 - 深圳风格
class ShenzhenPizzaFactory implements PizzaFactory {
@Override
public Pizza createPizza() {
return new ShenzhenVegetarianPizza();
}
}
// 客户端代码
public class PizzaStore {
public static void main(String[] args) {
PizzaFactory xiamenFactory = new XiamenPizzaFactory();
Pizza xiamenPizza = xiamenFactory.createPizza();
xiamenPizza.prepare();
xiamenPizza.bake();
xiamenPizza.cut();
xiamenPizza.box();
PizzaFactory shenzhenFactory = new ShenzhenPizzaFactory();
Pizza shenzhenPizza = shenzhenFactory.createPizza();
shenzhenPizza.prepare();
shenzhenPizza.bake();
shenzhenPizza.cut();
shenzhenPizza.box();
}
}
这个示例中,Pizza
接口定义了比萨的制造过程,XiamenCheesePizza
和 ShenzhenVegetarianPizza
是具体的比萨实现类。PizzaFactory
是一个工厂接口,有两个具体的工厂类 XiamenPizzaFactory
和 ShenzhenPizzaFactory
,它们分别负责创建厦门和深圳风格的比萨。客户端代码可以通过选择合适的工厂来获得对应的比萨对象。这样的设计使得系统更易扩展,当增加新的风格或类型的比萨时,只需添加新的具体类和工厂类即可。
Was this helpful?
0 / 0