基本介绍:
1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式
2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式
4)改进的思路分析
分析:修改代码可以接受,但是如果我们在其他的地方也有创建Pizza的代码,就意味着,也需要修改,而创建Pizza的代码,往往有多处。
思路:把创建Pizza对象封装到一个类中,这样我们有新的Pizza种类时,只需要修改该类即可,其它有创建到Pizza对象的代码就不需要修改了.->简单工厂模式
Pizza订购的类图
代码结构如下:
这里涉及到了5个类型,我这里分别贴出源代码
Pizza类,具体pizza的父类
package factory.simplefactory.pizzastore;
public abstract class Pizza {
protected String name;
abstract void prepare();
void bake(){
System.err.println(name + "baking;");
}
void cut(){
System.err.println(name + "cutting;");
}
void box(){
System.err.println(name + "boxing;");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
GreekPizza希腊Pizza
package factory.simplefactory.pizzastore;
public class GreekPizza extends Pizza {
@Override
void prepare() {
setName("GreekPizza");
System.err.println(name + "preparing;");
}
}
奶酪Pizza
package factory.simplefactory.pizzastore;
public class CheessPizza extends Pizza {
@Override
void prepare() {
setName("奶酪Pizza");
System.err.println(name + "preparing;");
}
}
简单工厂类
package factory.simplefactory.pizzastore;
//简单工厂类
public class SimpleFactory {
//根据orderType返回对应的Pizza对象
public Pizza createPizza(String orderType){
Pizza pizza = null;
System.err.println("使用简单工厂模式");
if(orderType.equals("greek")){
pizza = new GreekPizza();
}else if(orderType.equals("cheese")){
pizza = new CheessPizza();
}
return pizza;
}
}
下单Pizza类
package factory.simplefactory.pizzastore;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class OrderPizza {
//定义一个简单工厂对象
SimpleFactory s;
Pizza pizza = null;
//构造器
public OrderPizza(SimpleFactory simpleFactory){
setS(simpleFactory);
}
public void setS(SimpleFactory s) {
String orderType = "";//用户输入的
this.s = s;
do{
orderType = getType();
Pizza pizza = s.createPizza(orderType);
if(pizza != null) {
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}else{
System.err.println("订购pizza失败,没有这种pizza!");
}
}while (true);
}
private String getType(){
try{
BufferedReader string = new BufferedReader(new InputStreamReader(System.in));
System.err.println("input pizza type:");
String str = string.readLine();
return str;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
}
测试类
package factory.simplefactory.pizzastore;
public class Main {
public static void main(String[] args) {
new OrderPizza(new SimpleFactory());
}
}
这样子,一旦有新的Pizza品种,只需要修改简单工厂类SimpleFactory即可。
补充:
简单工厂模式,也叫静态工厂模式
一般来说,简单工厂模式的create方法一般是使用静态方法
需要对上面的修改2个文件
SimpleFactory 和 OrderPizza
如下:
package factory.simplefactory.pizzastore;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class OrderPizza {
Pizza pizza = null;
//构造器
public OrderPizza(){
setS();
}
public void setS() {
String orderType = "";//用户输入的
do{
orderType = getType();
Pizza pizza = SimpleFactory.createPizza(orderType);
if(pizza != null) {
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}else{
System.err.println("订购pizza失败,没有这种pizza!");
}
}while (true);
}
private String getType(){
try{
BufferedReader string = new BufferedReader(new InputStreamReader(System.in));
System.err.println("input pizza type:");
String str = string.readLine();
return str;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
}
package factory.simplefactory.pizzastore;
//简单工厂类
public class SimpleFactory {
//根据orderType返回对应的Pizza对象
public static Pizza createPizza(String orderType){
Pizza pizza = null;
System.err.println("使用简单工厂模式");
if(orderType.equals("greek")){
pizza = new GreekPizza();
}else if(orderType.equals("cheese")){
pizza = new CheessPizza();
}
return pizza;
}
}