书接上文,简单工厂模式解决的是可以枚举种类的类的问题,但是带来了高耦合的问题,并且对类系列繁多无从下手,那么我们想起了一种方法,那就是抽象类,建一个抽象工厂,抽象工厂里的方法都是根据系列类的差异区分出来的抽象方法。

抽象工厂方法

根据WWH来学习

1,WHAT?

什么是抽象工厂模式呢?先来看看百度的解释

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

上面是百度给的解释,那么联系我们举得例子,北汽绅宝汽车。

汽车三大件,发动机,变速箱,底盘,那么我们创建骑车对象需要这三个,而这三个又分为好多种类,比如说变速箱,AT,MT,所以,在这里我们需要创建一个抽象的变速箱,抽象的发动机,抽象的底盘,抽象的工厂,最后,所有的都是抽象的,然后具体的对象的类可以继承抽象类,根据里氏替换原则,子类是可以代替父类的,所以,最后实例化的是这些抽象产品的具体子类的实例

2,  WHY?

为什么要用呢?

步骤1上说了,这是抽象工厂模式中几乎都是抽象角色,这就给我们很大的扩展空间,只要继承这些抽象角色类就可以了,也就是说耦合度很低。

3,  HOW?

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

怎么实现抽象工厂模式呢?

 1 /******************************************************/
 2 //产品类
 3 public abstract class Engnie{}
 4 //扩展151发动机
 5 public class Engnie151 extends Engine{
 6     public Engnie151(){
 7         //need to do,实例化151发动机
 8     }
 9 }
10 //扩展153发动机
11 public class Engnie153 extends Engine{
12     public  Engnie153() {
13         //need to do ,实例化153发动机
14     }
15 }
16 /*********************************************************/
17 //工厂类
18 public interface AbstractEngnie{
19     public Engine createEngnie();
20 }
21 //生产151发动机的工厂
22 public class CreateEng151 implements AbstractEngnie{
23     public Engine createEngnie() {
24         return (Engine)new Engnie151();
25     }
26
27 }
28 /*********************************************************/
29 public class Customer{
30     public void GetSB(){
31         CreateEng151 ce151 = new CreateEng151();
32         ce151.createEngine();
33     }
34 }

抽象工厂模式

上面的就是抽象工厂模式,这个模式最大的好处就是送耦合。

那么问题来了:简单工厂模式和抽象工厂模式的区别是什么呢?

抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类

转载于:https://www.cnblogs.com/ningheshutong/p/6026760.html

JAVA设计模式之3-抽象工厂模式相关推荐

  1. java设计模式六(抽象工厂模式)

    java设计模式-抽象工厂模式 一.概述 抽象工厂模式是在工厂模式的基础上,加上了一个管理工厂的超级工厂.也就是说,工厂的作用是管理各种有相似功能的类,而超级工厂的作用是管理这些工厂. 二.模式示例: ...

  2. 【四】Java设计模式GOF23之抽象工厂模式

    目录 CarFactory.java public interface CarFactory {Engine createEngine();Seat createSeat();Tyre createT ...

  3. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  4. 设计模式二、抽象工厂模式

    设计模式part2 1.     抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...

  5. JAVA设计模式之3种工厂模式

    转自 JAVA设计模式之3种工厂模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离.为了使软件的结构更加清晰,外 ...

  6. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  7. JavaScript 23 种设计模式之 4 抽象工厂模式

    JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...

  8. java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式

    抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...

  9. Java描述设计模式(04):抽象工厂模式

    一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 抽象工厂模式:定义了一个in ...

  10. Java啤酒生产系统描述_Java描述设计模式(04):抽象工厂模式

    一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 1) 抽象工厂模式:定义了一 ...

最新文章

  1. 数据结构与算法(2-1)线性表之顺序存储(顺序表)
  2. 剑指offer:面试题15. 二进制中1的个数
  3. 银光中国网免费Silverlight空间Web Service部署方法
  4. 从头开始安装Ubuntu,cuda,cudnn,caffe,tensorflow,ROS
  5. sql 列求和_Excel VBA高级编程SQL检索(二)合并相同项并求和
  6. Executors框架——5种常用的线程池介绍及区别
  7. android单片机蓝牙小车,手把手教你做蓝牙小车
  8. VTK:移除外表面用法实战
  9. USACO Training Section 1.1黑色星期五Friday the Thirteenth
  10. 关于TikTok的变现思考和三种玩法
  11. CSS高级技巧【学习笔记】
  12. org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
  13. igzo屏幕优点与缺点_手机贴膜怎么选?选对了可以省个屏幕钱
  14. Python 一键提取PDF版论文表格数据
  15. php 验证手机号邮箱,PHP使用正在表达检查是否未手机号码或者邮箱
  16. PO与VO之间的相互转换
  17. 小程序内部如何跳转公众号
  18. Ubuntu上安装vmware
  19. 两种批处理方式(操作系统)
  20. 如何利用Parsec+Zerotier+moon实现云电脑云游戏

热门文章

  1. Go 并发 多线程 goroutine channel 实例
  2. Thinkphp if标签不支持3层以上嵌套
  3. ElasticSearch 查询最多10000条数据
  4. 关于局部变量的几个难点
  5. php如何处理耗时的任务,PHP如何在请求完毕后继续处理耗时任务
  6. 什么将计算机连接到网络,Windows 8.1官方教程:将电脑连接到网络-windows技巧-电脑技巧收藏家...
  7. pp什么叫php的事务,ThinkPHP5.0框架事务处理操作简单示例
  8. 计算机秘密程序 听课反思,《编制计算机程序解决问题》的教学反思
  9. Hibernate工作流程及与 MyBatis的比较
  10. Linux chapter 2