码迷,mamicode.com
首页 > 其他好文 > 详细

Pattern-No.06 设计模式之工厂模式

时间:2015-04-10 11:44:36      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

1、简单工厂模式:又称为静态工厂方法模式,其作用是定义一个创建对象的接口

package com.shma.factory.simplefactory.pizza;

import java.util.ArrayList;
import java.util.List;

/**
 * 定义一个公共的抽象披萨类
 * @author admin
 *
 */
public abstract class Pizza {
	protected String name;
	protected String dough;
	protected String sauce;
	protected List<String> toppings = 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 < toppings.size(); i++) {
			display.append((String )toppings.get(i) + "\n");
		}
		return display.toString();
	}
}

package com.shma.factory.simplefactory.pizza;

/**
 * 披萨类型
 * @author admin
 *
 */
public enum PizzaType {

	CHESS, CLAM, PEPPERONI, VEGGIE
}

package com.shma.factory.simplefactory.pizza;

/**
 * 具体的披萨实现类
 * @author admin
 *
 */
public class CheesePizza extends Pizza {
	public CheesePizza() {
		name = "Cheese Pizza";
		dough = "Regular Crust";
		sauce = "Marinara Pizza Sauce";
		toppings.add("Fresh Mozzarella");
		toppings.add("Parmesan");
	}
}

package com.shma.factory.simplefactory.pizza;

/**
 * 具体的披萨实现类
 * @author admin
 *
 */
public class ClamPizza extends Pizza {

	public ClamPizza() {
		name = "Clam Pizza";
		dough = "Thin crust";
		sauce = "White garlic sauce";
		toppings.add("Clams");
		toppings.add("Grated parmesan cheese");
	}
}

package com.shma.factory.simplefactory.pizza;

/**
 * 具体的披萨实现类
 * @author admin
 *
 */
public class PepperoniPizza extends Pizza {
	public PepperoniPizza() {
		name = "Pepperoni Pizza";
		dough = "Crust";
		sauce = "Marinara sauce";
		toppings.add("Sliced Pepperoni");
		toppings.add("Sliced Onion");
		toppings.add("Grated parmesan cheese");
	}
}

package com.shma.factory.simplefactory.pizza;

/**
 * 具体的披萨实现类
 * @author admin
 *
 */
public class VeggiePizza extends Pizza {
	public VeggiePizza() {
		name = "Veggie Pizza";
		dough = "Crust";
		sauce = "Marinara sauce";
		toppings.add("Shredded mozzarella");
		toppings.add("Grated parmesan");
		toppings.add("Diced onion");
		toppings.add("Sliced mushrooms");
		toppings.add("Sliced red pepper");
		toppings.add("Sliced black olives");
	}
}

package com.shma.factory.simplefactory;

import com.shma.factory.simplefactory.pizza.CheesePizza;
import com.shma.factory.simplefactory.pizza.ClamPizza;
import com.shma.factory.simplefactory.pizza.PepperoniPizza;
import com.shma.factory.simplefactory.pizza.Pizza;
import com.shma.factory.simplefactory.pizza.PizzaType;
import com.shma.factory.simplefactory.pizza.VeggiePizza;

/**
 * 简单披萨工厂类
 * @author admin
 *
 */
public class SimplePizzaFactory {

	public Pizza createPizza(PizzaType type) {
		Pizza pizza = null;
		switch(type) {
			case CHESS :
				pizza = new CheesePizza();
				break;
			case CLAM :
				pizza = new ClamPizza();
				break;
			case PEPPERONI :
				pizza = new PepperoniPizza();
				break;
			case VEGGIE :
				pizza = new VeggiePizza();
		}
		
		return pizza;
	}
}

package com.shma.factory.simplefactory;

import com.shma.factory.simplefactory.pizza.Pizza;
import com.shma.factory.simplefactory.pizza.PizzaType;


/**
 * 披萨商店类
 * @author admin
 *
 */
public class PizzaStore {

	private SimplePizzaFactory simplePizzaFactory;
	
	public PizzaStore(SimplePizzaFactory simplePizzaFactory) {
		this.simplePizzaFactory = simplePizzaFactory;
	}
	
	public Pizza orderPizza(PizzaType type) {
		Pizza pizza = simplePizzaFactory.createPizza(type);
		
		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();

		return pizza;
		
	}
}

package com.shma.factory.simplefactory;

import com.shma.factory.simplefactory.pizza.Pizza;
import com.shma.factory.simplefactory.pizza.PizzaType;

public class PizzaTestMain {

	public static void main(String[] args) {
		//创建一个简单披萨工厂
		SimplePizzaFactory simplePizzaFactory = new SimplePizzaFactory();
		//创建一个披萨商店,传递制作披萨的工厂simplePizzaFactory
		PizzaStore store = new PizzaStore(simplePizzaFactory);
		
		//客户下订单制作chess口味的披萨
		Pizza pizza = store.orderPizza(PizzaType.CHESS);
		System.out.println(pizza);
		
		//客户下订单制作veggie口味的披萨
		pizza = store.orderPizza(PizzaType.VEGGIE);
		System.out.println(pizza);
	}
}


Pattern-No.06 设计模式之工厂模式

标签:

原文地址:http://my.oschina.net/shma1664/blog/398416

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!