抽象工厂模式和工厂方法模式有一点相似,都是有抽象产品类 具体产品类和抽象工厂类 具体工厂类。那么他们的差别是什么呢。讲之前先说一下产品族和产品线的关系,
产品族就是有不同的产品线的产品组装到一起的一个大产品,产品线就是具体的一个产品的集合,比如,电脑就是一个产品族,它是由不同的产品(cpu 主板)等组成的,而产品线就是具体的产品了,就是指 cpu 和主板
我们想要组装一个电脑的话,假如用工厂方法模式,那么就需要不同的产品工厂类,例如 CpuFactory 就是生产不同类型的cpu 。但这样有一个问题,那就是一个产品族里不同的产品是由某种联系的,比如 intel的cpu和intel的主板必须得配套使用。这样生产出的产品族才不会出问题,但如果使用工厂方法模式,具体的产品族的产品都是有用户通过产品工厂类来生产出来。这样就非常容易出问题。
加入用抽象工厂模式就不会有这样的问题。
首先看产品类
public interface Cpu {
}
public class IntelCpu implements Cpu { }
public class AmdCpu implements Cpu { }下面是主板的产品类
public interface Board {
}
public class IntelBoard implements Board { }
public class AmdBoard implements Board { }再看工厂类
public interface Factory { public Cpu makeCpu(); public Board makeBoard(); }
public class AmdFactory implements com.rocker.test1.factory.Factory { @Override public Cpu makeCpu() { return new AmdCpu(); } @Override public Board makeBoard() { return new AmdBoard(); } }
public class IntelFactory implements com.rocker.test1.factory.Factory { @Override public Cpu makeCpu() { return new IntelCpu(); } @Override public Board makeBoard() { return new IntelBoard(); } }这样通过抽象工厂类就可以生产出同一产品族的产品了