抽象工厂模式是工厂方法模式的升级版本,它引入了产品族的概念:一系列相关或相互依赖的对象组成的集合。
比如魔兽争霸中的种族(人族,兽族,暗夜精灵族,不死族)
由于通用类图与角色和工厂方法模式相同,这里就省略了,直接看代码:
抽象产品和具体产品给出实现:
1 //骑兵接口 2 public interface Cavalry{ 3 } 4 //人族骑士 5 public class knight implements Cavalry{ 6 } 7 //兽族狼骑士 8 public class Wolfrider implements Cavalry{ 9 }
1 //步兵接口 2 public interface Infantry{ 3 } 4 //人族步兵 5 public class Footman implements Infantry{ 6 } 7 //兽族步兵大G 8 public class Grunt implements Infantry{ 9 }
抽象工厂角色:
1 //兵营接口 2 public interface Barracks{ 3 //生产骑兵 4 public Cavalry createCavalry(); 5 //生产步兵 6 public Infantry createInfantry(); 7 }
具体工厂角色:
1 //兽族兵营 2 public class OrcBarracks implements Barracks{ 3 @Override 4 public Cavalry createCavalry() { 5 return new Wolfrider();//生产狼骑士 6 } 7 @Override 8 public Infantry createInfantry() { 9 return new Grunt();//生产大G 10 } 11 }
//人族兵营 public class HumanBarracks implements Barracks{ @Override public Cavalry createCavalry() { return new knight();//人族骑士 } @Override public Infantry createInfantry() { return new Footman();//人族步兵 } }
这里的兽族兵营和人族兵营就相当于不同的两个产品族,可以看出这种模式的本质就是由具体工厂角色选择性的实现产品族。