工厂方法和抽象工厂

读书笔记  
工厂方法:通过提供一个抽象的接口,让继承接口的子类去实现工厂方法(生产实例的方法)。  
以pizza为例,定义接口PizzaStore,和工厂方法createPizza(String type)  

让继承其接口的子类NYPizzaStore,自定义实现createPizza(String type),从而实现对于用户和具体商品的解耦和。


Interface PizzaStore{    
    Pizza createPizza();
}

class NYPizzaStore implements PizzaStore{
    @override
    Pizza createPizza(String type){
        // 伪代码 通过不同type创建不同的pizza实例
        Pizza pizza = new NYTypePizza();
        return pizza;
    }
} 

Interface Pizza{
    String type;
}


抽象工厂:通过提供一个抽象的接口,用于创建相关或依赖对象的家族,不需要明确指定具体类。
仍然以pizza为例,定义接口PizzaIngredientFactory,和工厂方法createDough(),createSauce(),这两个实例是生产pizza的原料让继承其接口的子类NYPizzaIngredientFactory,自定义实现createDough(),createSauce(),这个过程通过两个工厂方法模式实现。
PizzaStore接口中,createPizza(PizzaIngredientFactory f) 通过传入不同的原料工厂,使用不同的原料制造pizza。
从而实现pizza对于原料的解耦。

Interface PizzaStore{
	    abstract Pizza createPizza(PizzaIngredientFactory f);
	}

	Interface PizzaIngredientFactory{
	    Dough createDough() {
		}
	    Sauce createSauce() {
		}
	}
	class NYPizzaStore implements PizzaStore{
	    @Override
	    Pizza createPizza(PizzaIngredientFactory f){
	        // 伪代码 通过不同type创建不同的pizza实例
	        Pizza pizza = new NYTypePizza(f);
	        return pizza;
	    }
	} 

	Interface Pizza{
	    Dough dough;
	    Sauce sauce;
	    void prepare() {
		}
	}
	
	class NYPizza implements Pizza{
		Dough dough;
		Sauce sauce;
		PizzaIngredientFactory p;
		public NYPizza(PizzaIngredientFactory f){
			this.p = f;
		}
		void prepare(){
			dough = p.createDough();
			sauce = p.createSauce();
		}
	}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值