Java设计模式:简单工厂模式(Simple Factory Pattern)

简单工厂模式:

可以使用静态方法,因为这样它可以不需要创建对象,但缺点是:不能通过继承来改变创建方法的行为。

简单工厂其实不是一个设计模式,反而更像一种编程习惯。

事例:

一个披萨店,会生产各种类型的披萨,如蔬菜类、蛤蜊类、奶酪类、意大利辣肠类等。

步骤:

1)选择一种类型的披萨

2)准备、烧烤、切片、包装 

UML类图


遵循的设计原则:

对修改关闭,对扩展开放

Pizza.java 披萨抽象超类

package com.jing.factory.simple;

import java.util.ArrayList;

public abstract class Pizza {

	String name; // 名字
	String dough;// 面包
	String sauce;// 酱料

	// 佐料
	ArrayList<String> topping = new ArrayList<String>();

	public String getName() {
		return name;
	}

	public void prepare() {
		System.out.println("Preparing " + name);
	}

	public void bake() {
		System.out.println("Baking " + name);
	}

	public void cut() {
		System.out.println("Cutting " + name);
	}

	public void box() {
		System.out.println("Boxing " + name);
	}

	public String toString() {
		StringBuffer display = new StringBuffer();
		display.append("---- " + name + " ---------\n");
		display.append(dough + "\n");
		display.append(sauce + "\n");

		for (int i = 0; i < topping.size(); ++i) {
			display.append((String) topping.get(i) + "\n");
		}

		return display.toString();
	}

}

CheesePizza.java 奶酷披萨

package com.jing.factory.simple;

public class CheesePizza extends Pizza {

	public CheesePizza() {
		name = "Cheese Pizza"; // 奶酪 披萨
		dough = "Regular Crust"; // 普通的披萨饼皮
		sauce = "Marinara Pizza Sauce"; // 蕃茄酱,沙司

		topping.add("Fresh Mozzarella");// 新鲜的马苏里拉奶酪
		topping.add("Parmesan");// 芝士
	}
}
ClamPizza.java 蛤蜊披萨
package com.jing.factory.simple;

public class ClamPizza extends Pizza {

	public ClamPizza(){
		name = "Clam Pizza";//蛤蜊
		dough = "Thin crust";// 薄的面皮
		sauce = "White garlic sauce";//白的蒜酱
		
		topping.add("Clams");
		topping.add("Grated Parmesan cheese");// 巴马干酪
	}
}

VeggiePizza.java 蔬菜披萨

package com.jing.factory.simple;

public class VeggiePizza extends Pizza {

	public VeggiePizza(){
		name = "Veggie Pizza"; // 蔬菜
		dough = "Crust";
		sauce = "Marinara sauce";// 蕃茄酱
		
		topping.add("Shredded mozzaredlla");// 意大利干酪
		topping.add("Grated parmesan");// 芝士
		topping.add("Diced onion");// 切丁洋葱
		topping.add("Sliced mushrooms");//切片蘑菇
		topping.add("Sliced red pepper");//切片红花椒
		topping.add("Sliced black olives");//橄榄
		
	}
	
}

PepperoniPizza.java 意大利辣肠披萨

package com.jing.factory.simple;

public class PepperoniPizza extends Pizza {

	public PepperoniPizza(){
		name = "Pepperoni Pizza";//意大利辣肠
		dough = "Curst";// 面皮
		sauce = "Marinara sauce";// 蕃茄酱
		
		topping.add("Sliced Pepperoni");// 切片辣肠
		topping.add("Sliced Onion");    // 切片洋葱
		topping.add("Grated parmesan cheese");//芝士奶酪
	}
	
}

SimplePizzaFactory.java 简单披萨工厂,用于生产各种披萨,它是我们唯一用来披萨类的地方

package com.jing.factory.simple;

public class SimplePizzaFactory {

	public Pizza createPizza(String type){
		
		Pizza pizza = null;
		
		if (type.equals("cheese")){
			pizza = new CheesePizza();
		} else if (type.equals("pepperoni")){
			pizza = new PepperoniPizza();
		} else if (type.equals("clam")){
			pizza = new ClamPizza();
		} else if (type.equals("veggie")){
			pizza = new VeggiePizza();
		}
		
		return pizza;
	}
}

PizzaStore.java 披萨店,拥有一个生产工厂,及确定种类后的生产流程

package com.jing.factory.simple;

public class PizzaStore {

	SimplePizzaFactory factory;
	
	public PizzaStore(SimplePizzaFactory factory){
		this.factory = factory;
	}

	public Pizza orderPizza(String type){
		Pizza pizza;
		
		pizza = factory.createPizza(type);
		
		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();
		
		return pizza;
	}
}
Test.java 测试类

package com.jing.factory.simple;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// 生成一个披萨的生产工厂
		SimplePizzaFactory factory = new SimplePizzaFactory();

		// 生成一个披萨店,它保存生产工厂
		PizzaStore store = new PizzaStore(factory);

		// 生产一个奶酪披萨
		Pizza pizza = store.orderPizza("cheese");
		System.out.println("we ordered a " + pizza.getName() + "\n");

		// 生产一个蔬菜披萨
		pizza = store.orderPizza("veggie");
		System.out.println("we ordered a " + pizza.getName() + "\n");
	}
}
输出:
Preparing Cheese Pizza
Baking Cheese Pizza
Cutting Cheese Pizza
Boxing Cheese Pizza
we ordered a Cheese Pizza

Preparing Veggie Pizza
Baking Veggie Pizza
Cutting Veggie Pizza
Boxing Veggie Pizza
we ordered a Veggie Pizza


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值