工厂方法模式

原创
2019/07/23 15:35
阅读数 71

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

工厂方法模式:每个抽象工厂派生多个具体工厂,每个抽象产品派生多个具体产品。每个具体工厂创建一个具体产品。

        这里由子类决定,不是运行时决定,而是创建类时,不需要知道实际创建产品是哪一个。选择了使用哪个子类,自然就决定了实际创建的产品是什么。

工厂方法例子:

public abstract class PizzaStore {
	
	public Pizza orderPizza(String type){
		Pizza pizza;
		
		pizza= createPizza(type);
		
		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();
		
		return pizza;
	}
	abstract Pizza createPizza(String type);
}
public class NYPizzaStore extends PizzaStore{

	@Override
	Pizza createPizza(String item) {
		// TODO Auto-generated method stub
		
		if(item.equals("cheese"))
		{
			return new NYStyleCheesePizza();
		}
		else 
			return null;
	}
}
public abstract class Pizza {
	
	String name;
	String dough;
	String sauce;
	ArrayList<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() {
		// code to display pizza name and ingredients
		StringBuffer display = new StringBuffer();
		display.append("---- " + name + " ----\n");
		display.append(dough + "\n");
		display.append(sauce + "\n");
		for (String topping : toppings) {
			display.append(topping + "\n");
		}
		return display.toString();
	}
}
public class NYPizzaStore extends PizzaStore{

	@Override
	Pizza createPizza(String item) {
		// TODO Auto-generated method stub
		
		if(item.equals("cheese"))
		{
			return new NYStyleCheesePizza();
		}
		else 
			return null;
	}
	
}

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部