抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在Java中,抽象工厂模式主要涉及以下几个角色:抽象产品、具体产品、抽象工厂和具体工厂。这种模式的主要优点是实现了代码的解耦,使得客户端不需要直接依赖于具体工厂,而是依赖于抽象工厂。应用场景包括需要创建一系列相关或相互依赖的对象时,以及需要将一组对象的创建逻辑封装到一个工厂中时。
本文目录导读:
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来,在抽象工厂模式中,每个抽象产品都可以对应到多个具体产品,当需要创建一个产品族时,客户端代码只需调用一个工厂对象就可以创建出多个产品族中的产品对象。
抽象工厂模式的原理
抽象工厂模式的主要目的是将一组相关的对象都生成出来,而不是一个个的生成,它通过提供一个接口来封装一组具有同一主题的类,这一组的类的实例都是要被返回的,这样,客户端就不需要知道这些类的具体实现,只需要知道它们都属于哪个工厂即可。
抽象工厂模式的主要角色有:
1、抽象工厂(AbstractFactory):是抽象产品类的根类,它声明了创建抽象产品对象的操作接口,但由子类来实现具体工厂类。
2、具体工厂(ConcreteFactory):它实现了抽象工厂声明的创建抽象产品对象的操作接口,它是抽象工厂类的子类。
3、抽象产品(AbstractProduct):它定义了产品的规范,描述了产品的主要特性和功能。
4、具体产品(ConcreteProduct):它实现了抽象产品所定义的接口,由具体工厂来创建,它们之间一一对应。
抽象工厂模式的实现
下面是一个简单的抽象工厂模式的实现示例:
// 抽象产品 interface Product { void operation(); } // 具体产品A class ConcreteProductA implements Product { public void operation() { System.out.println("ConcreteProductA operation"); } } // 具体产品B class ConcreteProductB implements Product { public void operation() { System.out.println("ConcreteProductB operation"); } } // 抽象工厂 interface Factory { Product createProduct(); } // 具体工厂A class ConcreteFactoryA implements Factory { public Product createProduct() { return new ConcreteProductA(); } } // 具体工厂B class ConcreteFactoryB implements Factory { public Product createProduct() { return new ConcreteProductB(); } }
抽象工厂模式的应用场景
抽象工厂模式主要用于以下场景:
1、一个系统不依赖于其他系统,但是它的组件需要运行在多平台或多环境中。
2、系统中的对象需要通过参数化配置来创建。
3、需要创建的对象是一系列相关或相互依赖的对象。
4、需要一个产品族的工厂,而不仅仅是一个单独的产品。
抽象工厂模式是一种结构型设计模式,它提供了一个方式,可以将一组具有同一主题的单独的工厂封装起来,它的主要优点是减少了系统的耦合性,使得客户端不需要知道具体产品的创建细节,只需要知道它们都属于哪个工厂即可,抽象工厂模式的缺点也很明显,那就是增加了系统的复杂性,因为它引入了新的抽象层。