三、抽象工厂模式
在抽象工厂模式中,抽象产品 (AbstractProduct) 可能是一个或多个,从而构成一个或多个产品族(Product Family)。在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。
编码实现
1.抽象工厂 用来说明此工厂可以生产哪些抽象类型产品
public interface AbstractFactory {
Vehicle createVehicle();
Food createFood();
Weapon createWeapon();
}
2.具体工厂 每个抽象类型的产品又可以生产哪种具体类型
public class DefaultFactory implements AbstractFactory {
@Override
public Vehicle createVehicle() {
return new Car();
}
@Override
public Food createFood() {
return new Apple();
}
@Override
public Weapon createWeapon() {
return new Sword();
}
}
3.抽象类
public abstract class Food {
abstract public void eat();
}
public abstract class Vehicle {
abstract public void run();
}
public abstract class Weapon {
abstract public void hit();
}
4.具体类
public class Apple extends Food {
@Override
public void eat() {
System.out.println("苹果成熟了可以吃");
}
}
public class Car extends Vehicle {
@Override
public void run(){
System.out.println("汽车开动了");
}
}
public class Sword extends Weapon {
@Override
public void hit() {
System.out.println("剑是近战攻击方式");
}
}
5.测试
public class AbsFectoryTest {
public static void main(String[] args) {
AbstractFactory abstractFactory = new DefaultFactory();
Food food = abstractFactory.createFood();
food.eat();
Vehicle vehicle = abstractFactory.createVehicle();
vehicle.run();
Weapon weapon = abstractFactory.createWeapon();
weapon.hit();
}
}