HeadFirst设计模式之工厂模式--简单工厂

针接口编程的时候,如果代码在未来有需要增加实现类,则需要将实例化代码的部分抽取出来(即将变化的部分从不变的部分分离出来)

Pizza orderPizza(String type){
     Pizza pizza;
     if(type.equal("cheese")){
         pizza = new CheesePizza();
     }else if(type.equal("pepperoni")){
         pizza = new PepperoniPizza();
     }else if(type.equals("clam")){
         pizza = new ClamPizza();
     }
    pizza.prepare();
    pizza.bake();
  }

将pizza具体实现分离出来

    Pizza orderPizza(String type){
        Pizza pizza = createPizza(type);
        pizza.prepare();
        pizza.bake();
    }
    //将创建pizza的实现封装起来
    Pizza createPizza(String type){
        Pizza pizza;
        if(type.equal("cheese")){
            pizza = new CheesePizza();
        }else if(type.equal("pepperoni")){
            pizza = new PepperoniPizza();
        }else if(type.equals("clam")){
            pizza = new ClamPizza();
        }
        return pizza;
    }


如果其他这样如果在其他地方需要piazza的具体实现类时,可以将直接调用createPizza(type)得到一个Pizza的实现类,不再类里面写Pizza类的具体的实现,

继续改造


package pizza;
//产品抽象类
public abstract class Pizza {

	public void prepare() {
		
	}

	public void bake() {	
		
	}

	public void cat() {		
		
	}
	public void box() {
		
		
	}
     
}


package pizza;
//具体产品
public class ChessePizza extends Pizza{

}

package pizza;
//具体产品
public class ClamePizza extends Pizza {
}package pizza;//工厂类public class SimplePizzaFactory { public Pizza createPizza(String type){ Pizza pizza = null; if("chesse".equals(type)){ pizza = new ChessePizza(); }else if("clame".equals(type)){ pizza = new ClamePizza(); } return pizza; }}package pizza;public class PizzaStore {SimplePizzaFactory simplePizzaFactory ;public PizzaStore(SimplePizzaFactory simplePizzaFactory){this.simplePizzaFactory = simplePizzaFactory;}public Pizza orderPizza(String type){Pizza pizza = simplePizzaFactory.createPizza(type);//调用产品类的方法做相关操作//如pizza类的切片、装盒等pizza.prepare();pizza.bake();pizza.cat();pizza.box();return pizza;}}

将factory作为参数放入Pizza的构造器里面使得Pizza类的实现必须调用SimplePizzaFactory类来创建Pizza。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值