抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。
应用场景:想必大家都玩过暴力摩托这款游戏(暴露了年龄),在游戏中赛车手可以骑行摩托和携带武器,我们假定他拿的武器是AK47(好拉风有木有)。这只是在普通的模式下,现在我们虚拟一个魔法模式。在魔法模式下赛车手骑的是扫把(对,你没有看错,是扫把)。手里拿的是魔法棒。
IabstractFactory接口
public interface IabstractFactory {
public IVehicle createVehicle(int i);
public IWeapon createWeapon(int i);
}
IVehicle接口
public interface IVehicle {
public void run();
}
IWeapon接口
public interface IWeapon {
public void attack();
}
普通模式
public class DefaultFactory implements IabstractFactory{
@Override
public IVehicle createVehicle(int i) {
return new Moto();
}
@Override
public IWeapon createWeapon(int i) {
return new AK47();
}
}
魔法模式
public class MagicFactory implements IabstractFactory{
@Override
public IVehicle createVehicle(int i) {
return new Broom();
}
@Override
public IWeapon createWeapon(int i) {
return new MagicStick();
}
}
AK47类
public class AK47 implements IWeapon{
@Override
public void attack() {
System.out.println("AK47....");
}
}
魔法棒
public class MagicStick implements IWeapon{
@Override
public void attack() {
System.out.println("MagicStick .....");
}
}
摩托车类
public class Moto implements IVehicle{
@Override
public void run() {
System.out.println("Moto.....");
}
}
扫把类
public class Broom implements IVehicle{
@Override
public void run() {
System.out.println("Broom....");
}
}
测试类
public class Test {
public static void main(String[] args) {
IabstractFactory f = new MagicFactory();
f.createVehicle(1).run();
f.createWeapon(1).attack();
}
}
测试结果