- 简单工程模式介绍
- 简单工程模式适用情况
- 简单工厂模式具体实现
- 简单工厂模式介绍:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
- 适用情况分析:简单工厂模式就是使用一个类来管理一类对象的创建。下面举例说明简单工厂模式的使用场景。比如有一个披萨店,里面卖各种各样的披萨,通过客人输入购买的披萨种类来生产披萨,如果不使用简单工厂模式的话,每生产一个披萨,我们就要new一个披萨对象,这样对披萨对象的管理就特别困难。因此使用简单工厂模式来管理披萨对象的生产.
- 具体代码实现:
首先实现一个披萨的类,出售的各种披萨需要继承这个类
package moshi.gunanyi.com.简单工厂模式.pizza;
public abstract class Pizza {
//披萨的名字
public String name;
//制作披萨准备
public abstract void prepare();
public void bake() {
System.out.println(name+" backing;");
}
public void cut() {
System.out.println(name+" catting;");
}
public void box() {
System.out.println(name+ " boxing");
}
public void setName(String name) {
this.name = name;
}
}
下面来实现各个披萨类
package moshi.gunanyi.com.简单工厂模式.pizza;
public class CheesePizza extends Pizza {
@Override
public void prepare() {
super.setName("CheesePizza");
System.out.println(name+" preparing;");
}
}
package moshi.gunanyi.com.简单工厂模式.pizza;
public class GreekPizza extends Pizza {
@Override
public void prepare() {
super.setName("GreekPizza");
System.out.println(name+" preparing;");
}
}
package moshi.gunanyi.com.简单工厂模式.pizza;
public class PepperPizza extends Pizza {
@Override
public void prepare() {
super.setName("PepperPizza");
System.out.println(name+" preparing;");
}
}
之后我们就要通过用户输入的种类来生产披萨对象,简单工厂模式的核心是在生产过程中把会改变的部分抽象出来形成一个工厂类,因为披萨的种类会增加或减少,所有生产披萨的过程需要抽象出一个工厂类,如下:
package moshi.gunanyi.com.简单工厂模式.simplefactory;
import moshi.gunanyi.com.简单工厂模式.pizza.CheesePizza;
import moshi.gunanyi.com.简单工厂模式.pizza.GreekPizza;
import moshi.gunanyi.com.简单工厂模式.pizza.PepperPizza;
import moshi.gunanyi.com.简单工厂模式.pizza.Pizza;
public class SimplePizzaFactory {
public Pizza CreatePizza(String orderType) {
Pizza pizza = null;
if(orderType.equals("cheese")) {
pizza = new CheesePizza();
}else if(orderType.equals("greek")) {
pizza = new GreekPizza();
}
else if(orderType.equals("pepper")) {
pizza = new PepperPizza();
}
return pizza;
}
}
具体披萨的生产,工厂类就是从这里面分离出去的:
package moshi.gunanyi.com.简单工厂模式.simplefactory;
import java.util.Scanner;
import moshi.gunanyi.com.简单工厂模式.pizza.Pizza;
public class OrderPizza {
private SimplePizzaFactory simplePizzaFactory;
public OrderPizza(SimplePizzaFactory simplePizzaFactory) {
setSimplePizzaFactory(simplePizzaFactory);
}
public void setSimplePizzaFactory(SimplePizzaFactory simplePizzaFactory) {
Pizza pizza = null;
String orderType;
this.simplePizzaFactory = simplePizzaFactory;
do {
orderType = getType();
pizza = simplePizzaFactory.CreatePizza(orderType);
if(pizza!=null) {
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}
}
while(true);
}
private String getType() {
System.out.println("请输入类型");
Scanner sca = new Scanner(System.in);
String result = sca.next();
return result;
}
}
测试:
package moshi.gunanyi.com.简单工厂模式.simplefactory;
public class PizzaStore {
public static void main(String[] args) {
SimplePizzaFactory simplePizzaFactory = new SimplePizzaFactory();
OrderPizza orderPizza = new OrderPizza(simplePizzaFactory);
}
}
运行结果: