本文是自己的学习笔记,主要参考以下资料
- 大话设计模式,程杰著,清华大学出版社出版
- 马士兵教育
- 1、抽象工厂应用场景
- 2、具体代码
- 2.1、设计抽象的产品簇
1、抽象工厂应用场景
工厂模式是为了方便生产单一的产品,而抽象工厂则是为了方便生产一个工厂。
一个工厂可以看成是一个产品簇。比如一个人物类。这个人物类需要配套的武器类,攻击方式类,交通工具类等等。那么这些类就可以看成是一个产品簇。
现在我们需要设计两种人物,一个是现代人,一个是魔法世界的人。
对于现代人来说,武器类是枪,攻击方式是开火,交通工具则是汽车。
对于魔法世界人来说,武器类是魔杖,攻击方式吟唱,交通工具则是扫帚。
那现在就有两个产品簇,我们就可以设计一个工厂,让这个工厂能快速方便地生产这两个产品簇。
首先是建立一个抽象工厂类,里面定义产品簇里需要哪些元素。
public abstract class Character{}
public abstract class Weapon{
public void attack();
}
public abstract class Vehicle{
public void move();
}
public abstract class AbstractFactory{
public Character createCharacter();
public Weapon createWeapon();
public Vehicle createVehicle();
}
## 2.2、设计具体的工厂类 那接下来就是继承抽象工厂类 首先是现代人的产品簇
public class modernPeople extends Character{}
public class Gun extends Weapon{
public void attack(){System.out.println("shoot");}
}
public class Car extends Vehicle{
public void move(){System.out.println("drive");}
}
public class ModernFactory{
public Character createCharacter(){return new ModernPeople();}
public Weapon createWeapon(){return new Gun();}
public Vehicle createVehicle(){return new Car();}
}
魔法世界人的产品簇
public class MagicPeople extends Character{}
public class MagicStick extends Weapon{
public void attack(){System.out.println("chant");}
}
public class Broom extends Vehicle{
public void move(){System.out.println("fly");}
}
public class MagicFactory{
public Character createCharacter(){return new MagicPeople ();}
public Weapon createWeapon(){return new MagicStick ();}
public Vehicle createVehicle(){return new Broom ();}
}
那使用时就变得非常简单,关于这个人物的所有行为都是一样的写法,如果我们想换一种人,只需要将具体的工厂类替换一下就行。
// AbstractFactory factory = new MagicFactory(); AbstractFactory factory = new ModernFactory(); Character character = factory.createCharacter(); Weapon weapon = factory.createWeapon(); weapon.attack(); Vehicle vehicle = factory.createVehicle(); vehicle.move();



