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