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