专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java抽象工厂模式详解

Java抽象工厂模式详解

更新时间:2022-10-25 10:55:57 来源:星辉 浏览1445次

抽象工厂设计模式示例

在本例中,我们将创建工厂方法设计模式的两个实现:AnimalFactory和Color Factory。

之后,我们将使用抽象工厂AbstractFactory 管理对它们的访问:

首先,我们将创建一个Animal类家族,稍后将在我们的抽象工厂中使用它。

这是动物界面:

public interface Animal {
    String getAnimal();
    String makeSound();
}

和一个具体的实现Duck:

public class Duck implements Animal {
    @Override
    public String getAnimal() {
        return "Duck";
    }
    @Override
    public String makeSound() {
        return "Squeks";
    }
}

此外,我们可以完全以这种方式创建Animal接口(如Dog、Bear等)的更具体的实现。

抽象工厂处理依赖对象的族。考虑到这一点,我们将引入另外一种颜色系列作为具有一些实现(白色、棕色……)的接口。

我们现在将跳过实际代码,但可以在此处找到。

现在我们已经准备好了多个系列,我们可以为它们创建一个AbstractFactory接口:

public interface AbstractFactory<T> {
    T create(String animalType) ;
}

接下来,我们将使用我们在上一节中讨论的工厂方法设计模式来实现AnimalFactory :

public class AnimalFactory implements AbstractFactory<Animal> {
    @Override
    public Animal create(String animalType) {
        if ("Dog".equalsIgnoreCase(animalType)) {
            return new Dog();
        } else if ("Duck".equalsIgnoreCase(animalType)) {
            return new Duck();
        }
        return null;
    }
}

同样,我们可以使用相同的设计模式为Color接口实现一个工厂。

设置完所有这些后,我们将创建一个FactoryProvider类,该类将为我们提供AnimalFactory或ColorFactory的实现,具体取决于我们提供给getFactory()方法的参数:

public class FactoryProvider {
    public static AbstractFactory getFactory(String choice){        
        if("Animal".equalsIgnoreCase(choice)){
            return new AnimalFactory();
        }
        else if("Color".equalsIgnoreCase(choice)){
            return new ColorFactory();
        }        
        return null;
    }
}

何时使用抽象工厂模式:

客户端独立于我们如何在系统中创建和组合对象

该系统由多个对象族组成,这些族旨在一起使用

我们需要一个运行时值来构造一个特定的依赖项

虽然该模式在创建预定义对象时非常有用,但添加新对象可能具有挑战性。要支持新类型的对象,需要更改AbstractFactory类及其所有子类。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>