抽象工厂(Factory Method)
概述:抽象工厂的意图在于创建一系列互相关联或互相依赖的对象。
工厂方法用来创建一个产品,它没有分类的概念,而抽象工厂则用于创建一系列产品,所以产品分类成了抽象工厂的重点。
低端冰箱
高端冰箱
洗衣机:
低端洗衣机
高端洗衣机
测试类:
概述:抽象工厂的意图在于创建一系列互相关联或互相依赖的对象。
工厂方法用来创建一个产品,它没有分类的概念,而抽象工厂则用于创建一系列产品,所以产品分类成了抽象工厂的重点。
工厂生产的所有产品都有高低端,其他的产品也都是遵守这个规则,于是就有了一下产品家族树
冰箱:低端冰箱
高端冰箱
洗衣机:
低端洗衣机
高端洗衣机
我们可以为冰箱和洗衣机分别定义两个产品接口,以对他们进行分类
洗衣机接口:
public interface Washer {}
冰箱接口:
public interface Icebox {}
低端洗衣机产品:
public class LowWasher implements Washer{
public LowWasher(){
System.out.println("低端洗衣机被制造了");
}
}
低端冰箱产品:
public class LowIcebox implements Icebox{
public LowIcebox(){
System.out.println("低端冰箱被制造了");
}
}
高端洗衣机产品:
public class LuxuryWasher implements Washer {
public LuxuryWasher(){
System.out.println("高端洗衣机被制造了");
}
}
高端冰箱产品:
public class LuxuryIcebox implements Icebox{
public LuxuryIcebox(){
System.out.println("高端冰箱被制造了");
}
}
低端产品工厂类:
//创建低端产品的工厂
public class LowFactory implements Factory{
//创建低端洗衣机
public Washer createWasher(){
return new LowWasher();
}
//创建低端冰箱
public Icebox createIcebox(){
return new LowIcebox();
}
}
高端产品工厂类:
//创建高端产品的工厂
public class LuxuryFactory implements Factory{
//创建高端洗衣机
public Washer createWasher(){
return new LuxuryWasher();
}
//创建高端冰箱
public Icebox createIcebox(){
return new LuxuryIcebox();
}
}
测试类:
public class Test {
public static void main(String[] args) {
LowFactory lowFactory = new LowFactory();
lowFactory.createWasher();
lowFactory.createIcebox();
LuxuryFactory luxuryFactory = new LuxuryFactory();
luxuryFactory.createWasher();
luxuryFactory.createIcebox();
}
}
在运用上工厂方法和抽象工厂,都有自己的应用场景,并没有什么优劣之分,但在应用抽象工厂之前,要先对创建的对象进行系统的分类,这点很重要,好的产品分类规则能为具体工厂类的选择调用和以后的扩展提供清晰的思路。