简单工厂模式是一种创建型模式,它属于类的创建型模式。它提供了一种创建对象的最佳方式,该模式使用一个函数来生成新的对象,而不必将客户端代码与类的具体实现绑定在一起。这个函数就是简单工厂。Java作为一种面向对象的编程语言,也可以使用简单工厂模式。在本文中,我们将介绍Java简单工厂模式的实例,并从多个角度进行分析。
一、实例背景
假如我们现在有一家披萨店,它可以制作不同种类的披萨。不同种类的披萨拥有不同的配料和口味。为了将制作披萨的过程标准化,让披萨店的员工不需要知道制作每种披萨的配料和口味,我们可以使用简单工厂模式来实现。
二、实现过程
在这个实例中,我们需要创建三个类:Pizza、CheesePizza和PepperoniPizza。
Pizza类:
```
public abstract class Pizza {
public abstract void prepare();
public abstract void bake();
public abstract void cut();
public abstract void box();
}
```
CheesePizza类:
```
public class CheesePizza extends Pizza {
public void prepare(){
System.out.println("Preparing cheese pizza.");
}
public void bake(){
System.out.println("Baking cheese pizza.");
}
public void cut(){
System.out.println("Cutting cheese pizza.");
}
public void box(){
System.out.println("Boxing cheese pizza.");
}
}
```
PepperoniPizza类:
```
public class PepperoniPizza extends Pizza {
public void prepare(){
System.out.println("Preparing pepperoni pizza.");
}
public void bake(){
System.out.println("Baking pepperoni pizza.");
}
public void cut(){
System.out.println("Cutting pepperoni pizza.");
}
public void box(){
System.out.println("Boxing pepperoni pizza.");
}
}
```
我们还需要创建一个PizzaSimpleFactory类,用于创建不同种类的披萨:
```
public class PizzaSimpleFactory {
public Pizza createPizza(String type) {
Pizza pizza = null;
if (type.equals("cheese")){
pizza = new CheesePizza();
} else if (type.equals("pepperoni")){
pizza = new PepperoniPizza();
}
return pizza;
}
}
```
最后,我们可以在PizzaStore类中使用PizzaSimpleFactory类来制作不同种类的披萨:
```
public class PizzaStore {
private PizzaSimpleFactory factory;
public PizzaStore(PizzaSimpleFactory factory) {
this.factory = factory;
}
public Pizza orderPizza(String type) {
Pizza pizza = factory.createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
```
三、实现分析
这个实例中,我们使用了简单工厂模式。Pizza类是一个抽象类,它定义了制作披萨的四个步骤:准备、烘烤、切片和装箱。CheesePizza和PepperoniPizza类是具体的披萨类,它们继承了Pizza类,并实现了抽象方法。PizzaSimpleFactory类是工厂类,它用于创建不同种类的披萨。PizzaStore类用于定制披萨,并使用PizzaSimpleFactory类创建实例。
这个实例中,简单工厂模式的优点在于它可以将客户端代码和具体实现分离,从而降低了程序的复杂度和耦合度。此外,它还可以增加代码的可维护性,因为你只需要修改工厂类中的代码,就可以更改生成对象的类。
同时,这个实例中也存在一些缺点。首先,工厂类的创建方法通常是静态的,这样会使得工厂类的可扩展性变得困难。其次,工厂类经常包含大量的if-else语句用于选择要创建的对象,这会增加代码的复杂度和维护难度。最后,它也会增加代码的运行时开销,因为每次调用工厂类都需要创建一个新的对象。
扫码咨询 领取资料