抽象工厂模式
一、概述
抽象工厂模式属于设计模式中的创建者模式,用于产品族的构建,抽象工厂模式是所有形态工厂模式中最为具有一般性的一种形态,抽象工厂是指有多个角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,是客户端在不必指定产品的情况下,创建多个产品族的产品对象。
二、结构模式图
三、java 代码实现
以水果举例,首先我们创建水果接口和水果工厂接口,
public interface Fruit{
/**
* 生产水果-接口
**/
public void get();
}
public interface FruitFactory{
public Fruit getApple();
public Fruit getBanana();
}
创建具体抽象的水果类,让具体抽象类实现水果接口:
public abstract class Apple implements Fruit{
// 苹果抽象类
public abstract void get();
}
public abstract class Banana implements Fruit{
// 香蕉抽象类
public abstract void get();
}
创建具体水果类,每个水果都分为A、B两个等级,
// Apple_A 继承苹果
public class Apple_A extends Apple{
@Override
public void get() {
System.out.println("生产A级-苹果");
}
}
// Apple_B 继承 Apple
public class Apple_B extends Apple{
@Override
public void get() {
System.out.println("生产B级-苹果");
}
}
分别创建生产A级水果和B级水果的A类工厂和B类工厂
public class FruitFactory_classA implements FruitFactory{
// A级水果工厂只生产A级水果
@Override
public Fruit getApple() {
// 生产A级苹果
return new Apple_A();
}
@Override
public Fruit getBanana() {
// 生产A级香蕉
return new Banana_A();
}
}
public class FruitFactory_classB implements FruitFactory{
// B级水果工厂只生产B级水果
@Override
public Fruit getApple() {
// 生产B级苹果
return new Apple_B();
}
@Override
public Fruit getBanana() {
// 生产B级香蕉
return new Banana_B();
}
}
调用演示:
public class Test {
public static void main(String[] args) {
FruitFactory_classA factory_classA = new FruitFactory_classA();
FruitFactory_classB factory_classB = new FruitFactory_classB();
// Apple
Fruit apple_A = factory_classA.getApple();
apple_A.get();
Fruit apple_B = factory_classB.getApple();
apple_B.get();
// Banana
Fruit banana_A = factory_classA.getBanana();
banana_A.get();
Fruit banana_B = factory_classB.getBanana();
banana_B.get();
}
}
四、工厂方法模式和抽象工厂模式比较
工厂方法模式中的每一个形态都是针对一定的问题的解决方案,针对的是多个产品系列结构;而抽象工厂模式针对的是多个产品簇结构,一个产品内有多个产品系列。