抽象工厂模式是工厂模式的进一步抽象
他们的区别如下:
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。
比如说工厂可以生产鼠标和键盘。那么抽象工厂的实现类(它的某个具体子类)的对象都可以生产鼠标和键盘,但可能工厂A生产的是罗技的键盘和鼠标,工厂B是微软的。
例子:
定义一个工厂抽象类
package com.lrb.shejimoshi;
public interface AbtractFactory {
//生产FoodA的类
public FoodA factoryA();
//生产FoodB的类
public FoodB factoryB();
}
两个食品的抽象类
public interface FoodA {
public void a();
}
public interface FoodB {
public void b();
}
工厂实现类
public class CreateFactoryB implements AbtractFactory{
//生产质量为B的产品
public FoodA factoryA() {
return new CreateBA();
}
@Override
public FoodB factoryB() {
return new CreateBB();
}
}
public class CreateFactoryA implements AbtractFactory{
//生产质量为A的产品
public FoodA factoryA() {
return new CreateAA();
}
@Override
public FoodB factoryB() {
return new CreateAB();
}
产品实现类:有四个实现类,举例一个
public class CreateAA implements FoodA {
@Override
public void a() {
System.out.println("这个是质量为A的FoodA");
}
}
测试类
public class Test {
public static void main(String[] args) {
AbtractFactory fca=new CreateFactoryA();
FoodA foodaa= fca.factoryA();
FoodB foodab= fca.factoryB();
AbtractFactory fcb=new CreateFactoryB();
FoodB foodbb=fcb.factoryB();
FoodA foodba=fcb.factoryA();
foodaa.a();
foodab.b();
foodba.a();
foodbb.b();
}}
运行结果为
这个是质量为A的FoodA
这个是质量为A的FoodB
这个是质量为B的FoodA
这个是质量为B的FoodB