抽象工厂模式Abstract Factory Pattern是一种比较常用的模式,其定义如下:
Provide an interface for creating families of related or dependent objects without specifying their concrete classes。为创建一组相关或相互依赖的对象提供一个借口,而且无需指定它们的具体类。
抽象工厂的一般模式:
/** * 抽象产品类 * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public abstract class AbstractProductA { // 每个产品公有的方法 public void shareMethod() { } // 每个产品相同的方法,不同实现 public abstract void doSomething(); }
/** * 产品实现类A1 * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public class ProductA1 extends AbstractProductA { @Override public void doSomething() { System.out.println("产品A1的实现方法"); } }
/** * 产品实现类A2 * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public class ProductA2 extends AbstractProductA { @Override public void doSomething() { System.out.println("产品A2的实现方法"); } }
/** * 抽象产品类B * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public abstract class AbstractProductB { // 每个产品公有的方法 public void shareMethod() { } // 每个产品相同的方法,不同实现 public abstract void doSomething(); }
/** * 产品实现类B1 * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public class ProductB1 extends AbstractProductB { @Override public void doSomething() { System.out.println("产品B1的实现方法"); } }
/** * 产品实现类B2 * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public class ProductB2 extends AbstractProductB { @Override public void doSomething() { System.out.println("产品B2的实现方法"); } }
接下来定义工厂:
/** * 抽象工厂类的职责是定义每个工厂要实现的功能 * 有N个产品族,在抽象工厂中就应该有N个创建方法 * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public abstract class AbstractCreator { // 创建A产品家族 public abstract AbstractProductA createProductA(); // 创建B产品家族 public abstract AbstractProductB creaetProductB(); }
/** * 工厂实现类1. * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public class Creator1 extends AbstractCreator { // 只生产产品等级为1的A产品 @Override public AbstractProductA createProductA() { return new ProductA1(); } // 只生产产品等级为1的B产品 @Override public AbstractProductB creaetProductB() { return new ProductB1(); } }
/** * 工厂实现类2 * 有M个产品等级就应该有M个实现工厂类,在每个实现工厂中,实现不同产品族的生产任务 * * @author XiongNeng * @version 1.0 * @since 13-5-21 */ public class Creator2 extends AbstractCreator { // 只生产产品等级为2的A产品 @Override public AbstractProductA createProductA() { return new ProductA2(); } // 只生产产品等级为2的B产品 @Override public AbstractProductB creaetProductB() { return new ProductB2(); } }
抽象工厂模式的优点:
1,封装性,每个产品的实现类不是高层关注的,高层与接口和抽象打交道,面向接口和抽象编程,解耦
2,产品族内的约束为非公开状态。
抽象工厂模式的缺点:
产品族扩展非常困难,如果在上面的工厂中增加一个生产产品C的能力,那么所有的层都要修改,违反开闭原则了。
抽象工厂模式使用场景:
一个对象族或一组没有任何关系的对象都有相同的约束,则可以使用抽象工厂类。例如一个文本编辑器和一个图片处理器,它们是一个对象族而且两者没有关系。在Unix和Windows下面文本编辑器的实现是不一样的,同样图片处理器也是不一样的,那么着两个没有任何关系的东西有了相同的约束:操作系统不同的时候两者的实现方案都不同,那么这时候就可以使用抽象工厂模式,产生不同操作系统下的编辑器和图片处理器产品族。
注意:在抽象工厂模式缺点中,我们说扩展产品族比较的困难,但是扩展产品等级是非常的容易的,比如上面的例子,如果我想增加Mac下面的编辑器和图片处理器,只要增加一个工厂实现类就可以了。完全可以通过扩展来实现需求的变更。
本人博客已搬家,新地址为:http://yidao620c.github.io/
相关推荐
Android之大话设计模式——:抽象工厂模式借鉴.pdf
Android之大话设计模式——:抽象工厂模式参考.pdf
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
抽象工厂模式是软件工程中常用的一种创建型设计模式,它的核心思想是为创建一组相关或相互依赖的对象提供一个接口,而不需要指定它们具体的类。在Java中,抽象工厂模式被广泛应用,它有助于整合代码,提高系统的可...
深入理解Python设计模式:抽象工厂模式实践与应用
抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式
抽象工厂模式由以下几个角色组成: 抽象工厂(AbstractFactory):定义了一组创建产品的抽象方法。 具体工厂(ConcreteFactory):实现了抽象工厂定义的抽象方法,用于创建具体产品的实例。 抽象产品...
**抽象工厂模式**是软件设计模式中的一种创建型模式,主要用在需要创建一系列相关或相互依赖的对象,而无需指定它们具体的类时。这个模式的关键在于提供了一个接口,允许客户端在不关心产品具体实现的情况下创建多个...
总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现方式、应用场景及其优缺点,旨在帮助读者理解并有效地运用这一设计模式。通过阅读博客和分析提供的代码示例,开发者可以更好地掌握抽象...
抽象工厂模式是设计模式中的一种,尤其适用于创建一组相关或相互依赖的对象。这个实例Demo将向我们展示如何在iOS环境中应用抽象工厂模式。 抽象工厂模式的核心思想是提供一个接口,用于创建一系列相关或相互依赖的...
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...
在软件开发中,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。...在实际项目中,抽象工厂模式常常与其他设计模式如工厂方法、单例、依赖注入等结合使用,以实现更复杂和健壮的系统架构。
java常用设计模式-抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建...
抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。它允许客户端创建一个产品族,其中每个产品都是同一类别中的一个实例,如创建GUI组件,可以同时为Windows和Mac OS提供对应的...
本主题聚焦于C++中的三个工厂模式:简单工厂、工厂方法和抽象工厂。这些模式都围绕着对象的创建过程,旨在提高代码的灵活性、可读性和可维护性。 1. **简单工厂模式**: - 简单工厂模式是一种静态工厂方法,它提供...
抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。这种模式在软件工程中被广泛应用,尤其是在涉及跨平台开发或者需要构建复杂的对象组合时。 在编程中,我们...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...