`

《设计模式》之四:抽象工厂模式

阅读更多

抽象工厂模式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

    Android之大话设计模式——:抽象工厂模式参考.pdf

    Android之大话设计模式——:抽象工厂模式参考.pdf

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...

    肯德基:抽象工厂模式

    抽象工厂模式是软件工程中常用的一种创建型设计模式,它的核心思想是为创建一组相关或相互依赖的对象提供一个接口,而不需要指定它们具体的类。在Java中,抽象工厂模式被广泛应用,它有助于整合代码,提高系统的可...

    深入理解Python设计模式:抽象工厂模式实践与应用

    深入理解Python设计模式:抽象工厂模式实践与应用

    抽象工厂设计模式抽象工厂设计模式

    抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式

    (超详细,超易懂)设计模式(三):抽象工厂模式,灵山派系谁上位

    抽象工厂模式由以下几个角色组成: 抽象工厂(AbstractFactory):定义了一组创建产品的抽象方法。 具体工厂(ConcreteFactory):实现了抽象工厂定义的抽象方法,用于创建具体产品的实例。 抽象产品...

    Android之大话设计模式:抽象工厂模式终稿.pdf

    **抽象工厂模式**是软件设计模式中的一种创建型模式,主要用在需要创建一系列相关或相互依赖的对象,而无需指定它们具体的类时。这个模式的关键在于提供了一个接口,允许客户端在不关心产品具体实现的情况下创建多个...

    走进设计模式之抽象工厂(Abstract Factory)

    总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现方式、应用场景及其优缺点,旨在帮助读者理解并有效地运用这一设计模式。通过阅读博客和分析提供的代码示例,开发者可以更好地掌握抽象...

    IOS 设计模式抽象工厂实例Demo

    抽象工厂模式是设计模式中的一种,尤其适用于创建一组相关或相互依赖的对象。这个实例Demo将向我们展示如何在iOS环境中应用抽象工厂模式。 抽象工厂模式的核心思想是提供一个接口,用于创建一系列相关或相互依赖的...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】

    java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    C#设计模式:抽象工厂实例解析.7z

    在软件开发中,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。...在实际项目中,抽象工厂模式常常与其他设计模式如工厂方法、单例、依赖注入等结合使用,以实现更复杂和健壮的系统架构。

    java常用设计模式-抽象工厂模式

    java常用设计模式-抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建...

    设计模式之工厂方法、简单工厂、抽象工厂

    抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。它允许客户端创建一个产品族,其中每个产品都是同一类别中的一个实例,如创建GUI组件,可以同时为Windows和Mac OS提供对应的...

    C++ 设计模式:简单工厂、工厂方法、抽象工厂练习代码

    本主题聚焦于C++中的三个工厂模式:简单工厂、工厂方法和抽象工厂。这些模式都围绕着对象的创建过程,旨在提高代码的灵活性、可读性和可维护性。 1. **简单工厂模式**: - 简单工厂模式是一种静态工厂方法,它提供...

    第三讲:抽象工厂模式

    抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。这种模式在软件工程中被广泛应用,尤其是在涉及跨平台开发或者需要构建复杂的对象组合时。 在编程中,我们...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    设计模式--抽象工厂模式实现多数据库连接

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...

Global site tag (gtag.js) - Google Analytics