1介绍
在上一讲工厂方法模式中我们发现卖水果现在特别火,于是我们也决定加盟个水果店卖水果。这样抽象工厂模式就诞生了。
抽象工厂模式:该模式是创建型模式的一种。抽象工厂模式是工厂方法模式的升级版,抽象工厂模式是创建不同的工厂,不同的工厂再去创建具体产品。
抽象工厂模式一般也有四种角色:抽象工厂、具体工厂、抽象产品和具体产品。
2 实现
第一步:创建工厂接口
FruitFactory.class
public interface FruitFactory {
public Fruit getApple();
public Fruit getBanana();
}
第二步:创建具体工厂
FactoryA.class / FactoryB.class
public class FactoryA implements FruitFactory {
@Override
public Fruit getApple() {
return new FactoryAApple();
}
@Override
public Fruit getBanana() {
return new FactoryABanana();
}
}
public class FactoryB implements FruitFactory {
@Override
public Fruit getApple() {
return new FactoryBApple();
}
@Override
public Fruit getBanana() {
return new FactoryBBanana();
}
}
第三步:创建产品接口
Fruit.class
public interface Fruit {
public void get();
}
第四步:创建产品抽象类
Apple.class / Banana.class
public abstract class Apple implements Fruit{
public abstract void get();
}
public abstract class Banana implements Fruit{
public abstract void get();
}
第五步:创建具体产品类
FactoryAApple.class / FactoryABanana.class / FactoryBApple.class / FactoryBBanana.class
public class FactoryAApple extends Apple{
@Override
public void get() {
System.out.println("工厂 A 生产苹果");
}
}
public class FactoryABanana extends Apple{
@Override
public void get() {
System.out.println("工厂 A 生产香蕉");
}
}
public class FactoryBApple extends Apple{
@Override
public void get() {
System.out.println("工厂 B 生产苹果");
}
}
public class FactoryBBanana extends Apple{
@Override
public void get() {
System.out.println("工厂 B 生产香蕉");
}
}
第六步:测试
MainClass.class
public class MainClass {
public static void main(String[] args) {
//创建FactoryA工厂
FruitFactory factory = new FactoryA();
//生产苹果
Fruit apple = factory.getApple();
apple.get();
//生产香蕉
Fruit banana = factory.getBanana();
banana.get();
}
}
抽象工厂模式相对于工厂方法模式来说,其可以实现多个具体工厂的产生,每个工厂都可以生产相应的产品。而工厂方法模式只能是一个具体的工厂。当抽象工厂模式中只剩下一个具体的工厂时便变成了工厂方法模式,两者之间是可以转换的,但他们的目的都是为了降低耦合度。