定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
结构图:
public abstract class AbstractFactory {
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
public abstract Food createFood();
}
public abstract class Weapon {
public abstract void shoot();
}
public abstract class Vehicle {
public abstract void run();
}
public abstract class Food {
public abstract void printName();
}
public class Broom extends Vehicle{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("go by broom");
}
}
public class Apple extends Food{
public void printName(){
System.out.println("apple");
}
}
public class AK47 extends Weapon{
public void shoot(){
System.out.println(".........");
}
}
public class Car extends Vehicle{
//private static ArrayList<Car> cars = new ArrayList<Car>();
public void run(){
System.out.println("go by car");
}
}
public class MushRoom extends Food{
@Override
public void printName() {
// TODO Auto-generated method stub
System.out.println("mushroom");
}
}
public class MagicStick extends Weapon{
@Override
public void shoot() {
// TODO Auto-generated method stub
System.out.println("");
}
}
public class MagicFactory extends AbstractFactory{
@Override
public Vehicle createVehicle() {
return new Broom();
}
@Override
public Weapon createWeapon() {
return new MagicStick();
}
@Override
public Food createFood() {
return new MushRoom();
}
}
public class DefaultFactory extends AbstractFactory{
@Override
public Vehicle createVehicle() {
return new Car();
}
@Override
public Weapon createWeapon() {
return new AK47();
}
@Override
public Food createFood() {
return new Apple();
}
}
public class Test {
public static void main(String[] args) {
//DefaultFactory f = new DefaultFactory();
AbstractFactory f = new MagicFactory();
Vehicle v = f.createVehicle();
v.run();
Weapon w = f.createWeapon();
w.shoot();
Food a =f.createFood();
a.printName();
}
}
优点:
具体产品从客户代码中被分离出来
容易改变产品的系列
将一个系列的产品族统一到一起创建
缺点:
在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口