抽象工厂模式

概述

抽象工厂模式(Abastract Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。

它提供一个创建一系列相关或相互依赖对象的接口,无须显式指定他们具体的类。每个生成的工厂都能按照工厂模式提供对象。

抽象工厂模式是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。

产品等级结构与产品族

抽象工厂模式是工厂方法模式的加强版。工厂方法模式针对一个产品等级结构,而抽象工厂模式面对多个产品等级结构,一个工厂角色可以负责多个不同产品等级结构中的产品对象的创建 。

产品等级结构

产品等级结构即产品的继承结构,如一个车辆抽象类,其子类有BM汽车、AD汽车等,则抽象车辆与具体品牌的车辆之间形成了一个产品等级结构,抽象车辆类是父类,而具体品牌的工厂类是子类。

产品族

产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如BM工厂生成的BM车轮、BM车架等组成一个产品族。这几个产品属于不同的产品等级结构,但由同一个工厂创建。

一系列相关产品, 如椅子 、 沙发和咖啡桌

系列产品的不同变体。 如现代、 ​ 维多利亚 、 ​ 装饰风艺术等风格生成椅子、沙发和咖啡桌

优缺点

优点:

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:

产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码

主要角色

1.抽象产品角色(AbstractProduct)

它是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。

2.具体产品角色(ConcreteProduct)

抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。

3.抽象工厂角色(AbstractFactory)

它是工厂方法模式的核心,它与应用程序无关。

4.具体工厂角色(ConcreteFactory)

它直接在客户端的调用下创建产品的实例。

抽象工厂模式的基本使用

创建抽象产品

创建抽象产品角色,工厂类所创建的产品的父类,封装了产品对象的公共方法

public interface IWheel {
    void create(String name);
}
public interface IFrame {
    void create(String name);
}

创建具体产品

创建一系列相关的产品对象,如创建BMCar产品族,扩展一系列相关产品对象。

public class CarWheel implements IWheel{
    @Override
    public void create(String name) {
        System.out.println("制造" name "车轮");
    }
}
public class CarFrame implements IFrame {
    @Override
    public void create(String name) {
        System.out.println("制造" name "车架");
    }
}

创建抽象工厂

创建抽象工厂,提供一个创建一系列相关或相互依赖对象的接口

public abstract class CarFactory {
    /**
     * 制造车轮产品
     */
   protected abstract  IWheel createWheel();

    /**
     * 制造车架产品
     */
   protected abstract  IFrame createFrame();
}

创建具体工厂

创建具体产品工厂,提供一个产品类的库

public class BMCarFactory extends CarFactory {
    @Override
    protected IWheel createWheel() {
        return new CarWheel();
    }
    @Override
    protected IFrame createFrame() {
        return new CarFrame();
    }
}
public class ADCarFactory extends CarFactory {
    @Override
    protected IWheel createWheel() {
        return new CarWheel();
    }
    @Override
    protected IFrame createFrame() {
        return new CarFrame();
    }
}

客户端执行

    public static void main(String[] args) {
        BMCarFactory bmCarFactory = new BMCarFactory();
        bmCarFactory.createFrame().create("BM");
        bmCarFactory.createWheel().create("BM");
        ADCarFactory adCarFactory = new ADCarFactory();
        adCarFactory.createFrame().create("AD");
        adCarFactory.createWheel().create("AD");
    }

制造BM车架
制造BM车轮
制造AD车架
制造AD车轮

到此这篇关于Java创建型设计模式之抽象工厂模式(Abstract Factory)的文章就介绍到这了,更多相关Java抽象工厂模式内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Java创建型设计模式之抽象工厂模式(Abstract Factory)的更多相关文章

  1. Swift语言工厂设计模式和抽象工厂设计模式

    工厂设计模式封装UI控件2.1扩展label。

  2. Swift设计模式之工厂方法模式

    转自Swift设计模式原文Design-Patterns-In-Swift

  3. Swift设计模式之抽象工厂模式

    转自Swift设计模式原文Design-Patterns-In-Swift

  4. MVVM 不是那么好

    我觉得MVVM是一种反人类的设计模式,它使架构更加混乱而非清晰。MVVM命名很糟糕名称是很重要的。ViewModel这一名称则没有发挥任何作用。ViewModel的第一种含义是modelfortheview。MVVM引进太多职责命名不够具体,导致这个类的任务无休止地增长。MVVM不改变你的架构viewmodel并不能从根本上改变你的应用程序的架构。我能想到的MVVM模式最大的好处就是它把“下水道”从苹果自带的viewcontrooller类转移到了viewmodel这一自定义的对象。

  5. 开发Swift iOS应用程序“正确的方式”

    最近,我学习了Swift和开发iOS应用程序的基础知识。现在,我想自己开发一个真正的应用程序,但我非常关心编写好的代码,所以我已经寻找“最佳实践”,“设计模式”和“正确的方式”来实现它。在我的搜索中,我发现这个greattutorial关于SwiftiOS应用程序中通常使用的所有设计模式,以及他们使用的示例。不应该将httpClient和persistencyManager声明为协议,然后HttpClient和PersistencyManager类实现该协议?我应该在哪里告诉应用程序?最后但并非最不重要的

  6. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. javascript的23种设计模式示例总结大全

    这篇文章主要为大家介绍了javascript的23种设计模式的总结大全,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  8. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  9. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  10. 详解JavaScript实现设计模式中的适配器模式的方法

    适配器模式可以根据需求转换(或调整)一个接口,创建含有您所需接口的另一个对象,并将它连接到您想改变接口的对象,从而完成这种转换,下面就来详解JavaScript实现设计模式中的适配器模式的方法

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部