书中介绍了三种工厂,简单工厂、工厂方法、抽象工厂。
1、简单工厂:不是一个设计模式,反而比较像是一种编程习惯。
这是我在网上找的图片,虽然不是类图,但是简洁明了。如果我们把方法声明成静态的,也就变成了静态工厂,易于使用但是不宜与扩展。
2、工厂方法:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化对迟到子类。
public abstract class PizzaStore {
public Pizza orderPizza(String type){
Pizza p=null;
p=createPizza(type);
p.init();
return p;
}
public abstract Pizza createPizza(String type);//工厂方法
}
public class NYPizzaStore extends PizzaStore {
public Pizza createPizza(String type) {//这里用new创建具体类
Pizza p=null;
if(type.equals("clam")){
p=new ClamPizza();
}
return p;
}
}
public class Test {
public static void main(String[] args) {
PizzaStore ps=new NYPizzaStore();
Pizza p=ps.orderPizza("clam");
}
}
这个工厂方法很适合创建游戏角色对象(比如××× 、主角、敌人、摆放物品等等),并且能为对象做一些初始化的工作。只是建立一个子类就够了。
3、抽象工厂:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
抽象工厂真的没用过啊。