抽象工厂和普通工厂区别,首先看下面代码场景
public class Client {
public static void main(String[] args) {
//假想下一个现代人开着一辆车(交通工具),拿着一把枪(武器),吃着面包
Car car = new Car();
Gun gun = new Gun();
Bread bread = new Bread();
}
}
如果场景换成魔法世界的人呢
public class Client {
public static void main(String[] args) {
//假想下一个魔法人骑着扫帚(交通工具),拿着魔棒(武器),吃着蘑菇
Broom broom= new Broom();
MagicStick magicStick = new MagicStick ();
Mushroom mushroom= new Mushroom ();
}
}
再换成古代人呢
public class Client {
public static void main(String[] args) {
//假想下一个魔法人骑着马(交通工具),拿着剑,吃着肉
Horse horse= new Horse();
Sword sword= new Sword ();
Meat meat= new meat ();
}
}
看出来了么?main方法里面根据不同的场景有不同的场景对象组(车,枪,面包一组),这时候用抽象工厂改造一下
第一步创建产品的抽象类
//下面自行创建3个抽象类
public abstract class Food {
public abstract void getName();
}
public abstract class Vehicle {
public abstract void getName();
}
public abstract class Weapon {
public abstract void getName();
}
第二步创建产品的实现类
public class Car extends Vehicle{
@Override
public void getName() {
System.err.println("我是汽车");
}
}
public class Gun extends Weapon{
@Override
public void getName() {
System.err.println("我是枪");
}
}
public class Bread extends Food{
@Override
public void getName() {
System.err.println("我是面包");
}
}
其他组(马,剑,肉)(扫帚,魔法棒,蘑菇)自行创建
第三步创建一个对象,没错就是具体的场景工厂(理解为小工厂)把具体产品包裹起来
public class ModernFactory {
public Vehicle VEHICLE() {
return new Car();
}
public Food createFood() {
return new Bread();
}
public Weapon createWeapon() {
return new Gun();
}
}
其他组小工厂(马,剑,肉)(扫帚,魔法棒,蘑菇)自行创建
第四步再创建一个对象,也就是创建小工厂的工厂,把小工厂理解为产品,让上面的3个具体工厂都是大工厂的多态化
public interface MyFactory {
Vehicle VEHICLE();
Food createFood();
Weapon createWeapon();
}
//小工厂改造为如下,多了公共实现类
public class ModernFactory implements MyFactory {
@Override
public Vehicle VEHICLE() {
return new Car();
}
@Override
public Food createFood() {
return new Bread();
}
@Override
public Weapon createWeapon() {
return new Gun();
}
}
总结:工厂模式是一个工厂类生产多个具体产品类(产品>工厂);
抽象工厂是:工厂类产生多个具体小工厂,而小工厂里面实现多个具体产品组合(产品>小工厂>工厂)
网友评论