工厂方法模式

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

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

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

工厂方法例子:

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;
	}
	
}

 

转载于:https://my.oschina.net/u/4045381/blog/3077835

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值