一、简单工厂模式
- 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为
- 简单工厂模式属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
- 简单工厂模式是工厂模式家族中最简单使用的模式。
- 先将抽象类或接口写出来
public abstract class Pizza {
protected String name;
public Pizza() {
}
public Pizza(String name) {
this.name = name;
}
public abstract void prepare();
public void bake() {
System.out.println("烘焙" + name + "披萨");
}
public void cut() {
System.out.println("切割" + name + "披萨");
}
public void box() {
System.out.println("打包" + name + "披萨");
}
}
public class CheesePizza extends Pizza {
public CheesePizza() {
super("cheese");
}
@Override
public void prepare() {
System.out.println("准备芝士");
}
}
public class CheesePizza extends Pizza {
public CheesePizza() {
super("cheese");
}
@Override
public void prepare() {
System.out.println("准备芝士");
}
}
public class GreekPizza extends Pizza {
public GreekPizza() {
super("Greek");
}
@Override
public void prepare() {
System.out.println("准备希腊的原料");
}
}
public class SimpleFactory {
public Pizza createPizza(String name) {
return switch (name) {
case "Greek" -> new GreekPizza();
case "Cheese" -> new CheesePizza();
case "Chinese" -> new ChinesePizza();
default -> null;
};
}
}
public class OrderPizza {
private SimpleFactory simpleFactory;
public OrderPizza(SimpleFactory simpleFactory) {
this.simpleFactory = simpleFactory;
}
public void manage(Scanner scan) {
while (scan.hasNextLine()) {
String s = scan.nextLine();
Pizza pizza = simpleFactory.createPizza(s);
if (pizza != null) {
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} else {
System.out.println("订购披萨失败");
break;
}
}
}
public static void main(String[] args) {
OrderPizza orderPizza = new OrderPizza(new SimpleFactory());
orderPizza.manage(new Scanner(System.in));
}
}
二、抽象工厂模式
- 抽象工厂模式:定义了一个
interface用于创建相关或有依赖的对象簇,而无需指明具体的类
- 将工厂分成两层,AbsFactory(抽象工厂)和具体实现的工厂子类。
- 这样将单个简单的工厂变成工厂簇,更利于代码的维护和拓展
- 存储路径

- 首先,定义
Pizza的接口
public interface Pizza {
void prepare();
void bake();
void cut();
void box();
}
public class BJCheesePizza 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("打包北京芝士披萨");
}
}
public interface AbsFactory {
Pizza createPizza(String name);
}
public class BJFactory implements AbsFactory {
@Override
public Pizza createPizza(String name) {
return switch (name) {
case "Cheese" -> new BJCheesePizza();
case "Pepper" -> new BJPepperPizza();
default -> null;
};
}
}
三、总结
- 工厂模式意义:将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系解耦。从而提高项目的拓展和维护性