定义:

在spring和其他的框架中,工厂模式被大量使用,实际上工厂模式就是帮助我们实例化对象的设计模式,因为在实际的项目中,实例化对象的同时,可能对象中有大量的初始化工作,如果每次项目有个地方用到这个实例化,后面都要加上一堆的初始化参数,变量等操作,那就太繁琐了并且后续维护难度大,我们可以把这个动作交给工厂,我们只需要调用工厂给我们提供的方法,就可以获取到初始化完成的对象。

场景:

一个客户到想网上购买一双鞋,考虑两个体育品牌,鸿星尔克和贵人鸟。

同时客户除了鞋子又想再买一件运动服

抽象工厂模式:

此博客是基于工厂方法模式的扩展,在原来的基础上,大工厂添加生产衣服方法,具体工厂去实现:

JAVA -- 工厂模式之 工厂方法模式_DGH2430284817的博客-CSDN博客

鞋产品接口:

public interface Shoes {/** @description: 买鞋*/public void buyShoes();
}

鸿星尔克鞋产品:

/** @description: 鸿星尔克*/
public class ERKE implements Shoes {@Overridepublic void buyShoes() {System.out.println("买一双鸿星尔克鞋");}
}

贵人鸟鞋产品:

/** @description: 贵人鸟*/
public class GRN implements Shoes {@Overridepublic void buyShoes() {System.out.println("买一双贵人鸟鞋");}
}

衣服产品接口:

public interface Clothes {/** @description: 展示衣服信息*/public void showClothes();
}

鸿星尔克衣服产品:

/** @description: 鸿星尔克衣服*/
public class ERKE_Clothes implements Clothes {@Overridepublic void showClothes() {System.out.println("一件鸿星尔克衣服");}
}

贵人鸟衣服产品:

/** @description: 贵人鸟衣服*/
public class GRN_Clothes implements Clothes {@Overridepublic void showClothes() {System.out.println("一件贵人鸟衣服");}
}

体育品牌工厂类

public interface SportsFactory {/** @description: 生产鞋* @return:  对应品牌店生产的鞋产品对象*/public Shoes makeShoes() ;/** @description: 生产衣服* @return:  对应品牌店生产的衣服产品对象*/public Clothes makeClothes() ;}

鸿星尔克工厂类:

public class ERKEFactory implements SportsFactory {@Overridepublic Shoes makeShoes() {//初始化店员,灯光,空调,镜子等等等等return new ERKE_Shoes();}@Overridepublic Clothes makeClothes() {//初始化衣服尺寸,衣服款式,颜色等等return new ERKE_Clothes();}
}

贵人鸟 工厂类:

public class GRNFactory implements SportsFactory {@Overridepublic Shoes makeShoes() {//初始化店员,灯光,空调,镜子等等等等return new GRN_Shoes();}@Overridepublic Clothes makeClothes() {//初始化衣服尺寸,衣服款式,颜色等等return new GRN_Clothes();}
}

测试类:

public class mainTest {public static void main(String[] args) {//客户买鞋,买衣服//客户想买鸿星尔克的鞋,创建鸿星尔克品牌工厂SportsFactory sportsFactory = new ERKEFactory();//鸿星尔克品牌工厂中创建鸿星尔克鞋产品对象Shoes shoes = sportsFactory.makeShoes();//鸿星尔克品牌工厂中创建鸿星尔克衣服产品对象Clothes clothes = sportsFactory.makeClothes();//鞋信息shoes.showShoes();//衣服信息clothes.showClothes();//客户想买贵人鸟的鞋,创建贵人鸟品牌工厂SportsFactory sportsFactory2 = new GRNFactory();//贵人鸟品牌工厂中创建贵人鸟鞋产品对象Shoes shoes2 = sportsFactory2.makeShoes();//鸿星尔克品牌工厂中创建贵人鸟衣服产品对象Clothes clothes2 = sportsFactory2.makeClothes();//鞋信息shoes2.showShoes();//衣服信息clothes2.showClothes();}
}

效果:

总结:

简单工厂,是把产品对象实例化中初始化的操作给工厂,把这一块代码抽象出来,以后初始化有改动,就只需要改工厂对应方法即可

工厂方法模式,对比简单工厂,简单工厂是把所有产品实例都交给一个大工厂,而工厂方法模式把这个操作细分给了具体的平台工厂,大工厂只提供抽象接口,具体实例化初始化由各自品牌工厂完成

抽象工厂模式, 是工厂方法模式的扩展,因为工厂方法模式是针对一种产品的,在迭代开发过程中,工厂可能需要扩充其他产品的功能,所以有了抽象工厂模式。当以后再有新产品入网球拍啥的,就可以在大工厂中定义新的接口方法,然后具体的工厂中去实现,新产品对应代码也加一套,修改量较小,并且不会影响到原来的产品代码,扩展性较强

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

  1. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  2. java抽象工厂模式_Java 抽象工厂模式

    Java设计模式 - 抽象工厂模式 抽象工厂模式是另一个创建模式. 抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂. 当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建 ...

  3. Java设计模式之工厂方法模式与抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...

  4. java工厂模式和抽象工厂_Java中的抽象工厂设计模式

    java工厂模式和抽象工厂 Welcome to Abstract Factory Design Pattern in java example. Abstract Factory design pa ...

  5. 简单工厂模式,工厂方法模式,抽象工厂模式总结-java版

    文章目录 LOG:更新日志 一.简单工厂模式,工厂方法模式,抽象工厂模式定义 二.三种工厂模式的优缺点以及适用场景 三.名词解释 四.简单工厂模式.工厂方法模式与抽象工厂模式之间的区别 五.抽象工厂模 ...

  6. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

  7. JAVA工厂模式优缺点_简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是 设计模式的一类:对于设计模式这个概 ...

  8. Java工厂模式(简单工厂、工厂方法、抽象工厂)详解

    工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式.在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象. 1.工厂模式的理解 1.1.工厂模式的分类 工厂模 ...

  9. 设计模式之工厂模式和抽象工厂

    设计模式分类 通常来说设计模式分为三大类: 创建型模式,共 5 种:工厂模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共 7 种:适配器模式.装饰器模式.代理模式.外观模式.桥接模 ...

  10. 创建型模式:抽象工厂

    个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂. 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介 ...

最新文章

  1. RDIFramework.NET ━ 9.8 用户权限管理 ━ Web部分
  2. 绝不重新定义继承而来的缺省值参数
  3. java可以返回微妙吗_Java开发中10个最为微妙的最佳编程实践
  4. python三本经典书籍-有哪些 Python 经典书籍?
  5. Linux系统压缩解压缩
  6. gps数据处理 java_GPS数据读取与处理
  7. 第四章 需求分析,用例分析法
  8. 【SPSS】重复测量设计方差分析-单因素
  9. 解决Elasticsearch集群 master_not_discovered_exception 异常
  10. Mac如何清理应用软件
  11. 文件夹排序(先文件夹排序,后文件排序)
  12. 解决Ubuntu设置静态ip网络连接失败的问题
  13. 今天过节,摔杯,逼宫,吃瓜吧?
  14. vlan绑定_华为S5700交换机设置IP-MAC绑定功能
  15. matplotlib-10 title添加标题
  16. EasyRecovery 15 mac中文免费密钥数据恢复 安装软件的方法教程及版本对比
  17. app ui设计规范
  18. 一个完整的python文件即是一个模块_README.md
  19. Kubernetes网络与CNI插件介绍
  20. 如何通过RGB值判断颜色深浅(转)

热门文章

  1. FFmpeg 编译安装使用总结
  2. 设计一个文件系统,需要考虑哪些因素?
  3. 诺顿 NIS2012杀毒软件 CPU、内存、磁盘IO占用情况测评
  4. Linux版的led显示屏控制软件,led显示屏控制软件
  5. 2022年泰迪杯数据分析_B题:银行客户忠诚度分析赛题数据_任务五
  6. ESXI 5.0 粉屏解决办法 vsphere 5 安装时”can’t detect last level cache”解决方法
  7. 计算机快捷键大全windows,windows系统常见快捷键大全
  8. 网页编辑器如何能实现直接粘贴把图片上传到服务器中
  9. tomcat 部署vue前端项目_oecUI: oec项目前端源码(webpack打包vue组件,静态文件部署到tomcat服务器)...
  10. c一些基本算法和公式