概述
- 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
- 在简单工厂模式中用于创建实例的方法通常是静态的方法,简单工厂模式又被称为静态工厂模式
实例
- 使用简单工厂模式,使得可以生产不同的pizza,如cheesePizza,GreekPizza等不同的Pizza,每一个Pizza都需要进行准备材料,做,切,打包等工作。
- 创建一个简单工厂,工厂的逻辑就是根据需要的类型返回对应的Pizza实例。
- 创建获取Pizza的对象,该对象通过工厂获取Pizza实例。
创建一个Pizza抽象类
//将pizza作为抽象类
public abstract class Pizza {
protected String name;//具体的名字
public abstract void prepare();//准备原材料,不同的pizza是不一样的,这里可以继承
public void bake(){
System.out.println(name + "baking");
}
public void cut(){
System.out.println(name + "cutting");
}
public void box(){
System.out.println(name + "boxing");
}
public void setName(String name) {
this.name = name;
}
}
各类Pizza继承Pizza
public class GreekPizza extends Pizza {
@Override
public void prepare() {
System.out.println("准备greekpizza的材料");
}
}
public class CheesePizza extends Pizza{
@Override
public void prepare() {
System.out.println("准备cheesepizza的材料");
}
}
编写工厂,主要是根据需要返回对应的Pizza实例
public class SimpleFactory {
public static Pizza createPizza(String orderType){
System.out.println("使用简单工厂模式");
Pizza pizza = null;
if(orderType.equals("greek")){
pizza = new GreekPizza();
pizza.setName("希腊披萨");
}else if (orderType.equals("cheese")){
pizza = new CheesePizza();
pizza.setName("奶酪披萨");
}
return pizza;
}
}
获取Pizza对象的订单,通过工厂获取
public class OrderPizza {
String orderType = "";//用户输入的对象
Pizza pizza = null;
public OrderPizza() {
//this.simpleFactory = simpleFactory;//设置简单的工厂对象
do{
orderType =getType();
pizza = SimpleFactory.createPizza(orderType);
//输出pizza
if (pizza != null) {
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}else{
System.out.println("订购pizza失败");
break;
}
}while(true);
}
//获取Pizza类型
private String getType(){
Scanner scan = new Scanner(System.in);
String type = scan.next();
return type;
}
}
总结:
- 简单工厂模式属于创建型模型,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种类的产品类的实例
- 简单工厂模式就是定义一个创建对象的类(工厂类),由这个类来封装实例化对象的行为
- 使用场景:当用到大量的创建某种、某类或者某批对象的时候,就会使用工厂模式。