创建者模式-抽象工厂模式

抽象工厂模式

一、概述

​ 抽象工厂模式属于设计模式中的创建者模式,用于产品族的构建,抽象工厂模式是所有形态工厂模式中最为具有一般性的一种形态,抽象工厂是指有多个角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,是客户端在不必指定产品的情况下,创建多个产品族的产品对象。

二、结构模式图

三、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();
    }
}

四、工厂方法模式和抽象工厂模式比较

​ 工厂方法模式中的每一个形态都是针对一定的问题的解决方案,针对的是多个产品系列结构;而抽象工厂模式针对的是多个产品簇结构,一个产品内有多个产品系列。

猜你喜欢

转载自www.cnblogs.com/zhaoqiang-lab/p/13192639.html