上一篇我们学习了简单工厂模式,最后对于增加新产品的缺点,我们在工厂方法模式中解决。
为学习简单工厂模式的小伙伴点击这里Java 设计模式之工厂模式(简单工厂模式)

工厂方法模式要点:

  • 避免简单工厂模式的缺点,即不满足开闭原则。
  • 工厂方法模式和简单工厂模式的区别是,简单工厂模式只有一个工程类(对一个项目或一个模块),工厂方法模式有一组实现了相同接口的工程类。

下面看看工厂方法模式的具体实现

首先在我们简单工厂模式的基础上,增加CarFactoryMethod接口

public interface CarFactoryMethod {Car crateCar();
}
`
然后分别创建我们的奥迪工厂和比亚迪工厂public class AudiFactory implements CarFactoryMethod {@Overridepublic Car crateCar() {return new AudiCar();}
}public class BydFactory implements CarFactoryMethod {@Overridepublic Car crateCar() {return new BydCar();}
}

最后在我们的客户端,分别利用奥迪工厂和比亚迪工厂进行生产

public class FactoryClient1 {public static void main(String[] args) {AudiCar audiCar = new AudiCar();BydCar bydCar = new BydCar();audiCar.create();bydCar.create();}
}

由以上我们可以看到,虽然我们的 工厂方法模式避免了 开闭原则,不再修改,只是增加类来解决新的产品问题,但是,这样一旦产品多了的时候,我们的类就会变的很多,难以管理。这种情况下,需要大家自行判断,自己适合哪种情况。

Java设计模式之工厂模式 (工厂方法模式)相关推荐

  1. Java设计模式【之】工厂方法模式【场景:制作咖啡】

    Java设计模式[之]工厂方法模式[场景:制作咖啡] 1.工厂方法 1.1.工厂方法模式 1.2.具体需求(生产多种咖啡) 2.代码实现 2.1.代码结构 2.2.咖啡抽象类 2.3.一种咖啡 2.4 ...

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

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

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

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

  4. 【一】Java 设计模式学习记录: 工厂模式

    文章目录 一.设计模式的分类 二.工厂模式 2.1 简单工厂模式 2.1.1 解决的问题 2.1.2 简单工厂模式是什么 2.1.3 优缺点 2.2 工厂方法模式 2.2.1 解决的问题 2.2.2工 ...

  5. Java设计模式(十二) 策略模式

    策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模 ...

  6. Java设计模式之行为型:解释器模式

    一.什么是解释器模式:         解释器模式,就是定义语言的文法,并建立一个解释器来解释该语言中的句子,通过构建解释器,解决某一频繁发生的特定类型问题实例. 这里我们将语言理解成使用规定格式和语 ...

  7. Java设计模式之行为型:访问者模式

    背景: 去医院看病时,医生会给你一个处方单要你去拿药,拿药我们可以分为两步走: (1)去柜台交钱,划价人员会根据处方单上的药进行划价,交钱. (2)去药房拿药,药房工作者同样根据处方单给你相对应的药. ...

  8. Java设计模式之行为型:状态模式

    背景: 介绍状态模式前,我们先看这样一个实例:公司力排万难终于获得某个酒店的系统开发项目,并且最终落到了你的头上.下图是他们系统的主要工作: 当第一眼看到这个系统时你就看出这是一个状态图,每个框都代表 ...

  9. Java设计模式之行为型:备忘录模式

    在开发过程中,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态.比如,在编程时假如编写失误,例如不小心误删除了几行代码,我们希望返回删除前的状态,便可以使用 Ctrl+Z 来进行返回,这时 ...

  10. Java设计模式之行为型:命令模式

    前言: 在开发中,我们可能需要向某些对象发送一些请求,但我们不知道请求的具体接收者是谁,也不知道被请求的操作是哪个,只知道在系统运行中指定具体的请求接收者即可,打个比方,电视遥控器,我们只需知道按哪个 ...

最新文章

  1. Nodejs--querystring (URL 查询字符串)
  2. java ipfs文件存储_原来IPFS是这样存储文件的
  3. SAP Business One on HANA登陆阿里云
  4. app.vue里使用data_Python爬虫使用正则爬取网站,正则都不会就别玩爬虫了!
  5. c++大作业迷宫游戏 规定时间内完成_小学生做作业磨蹭的7个原因及对策!太准了~...
  6. 读书笔记 --- [基础知识点] 小结3
  7. 操作系统:SFTP相关知识介绍
  8. 华为linux版笔记本安装win7,华为MateBook X Pro笔记本怎样安装win7系统
  9. 1.2 文本域(含可编辑表格实现)
  10. 《数据结构与抽象:Java语言描述(原书第4版)》一1.1 什么是包
  11. java 男女 相邻交换 队形_(Java实现) 洛谷 P1091合唱队形
  12. 关于CUTFTP如何免费下载
  13. PIC单片机IDE,IPE和PICkit3下载使用的几个坑
  14. 【1031】场景的「唤起点」和「临场感」
  15. 全新英特尔vPro平台,为数智时代保驾护航
  16. 华硕笔记本进入pe系统-华硕电脑从U盘启动-实测有效-转载--记录用
  17. 三方平台与对象存储对接后的应用场景及接口说明
  18. linux eap网络,linux – 定期无法连接到WPA2-EAP接入点
  19. Redis解决缓存雪崩和缓存穿透
  20. Quartz配置资源介绍

热门文章

  1. Windows使用msys+mingw编译imagemagick
  2. flutter 分组列表
  3. 【STM32F767】使用RTThread和TouchGFX实现DIY数字仪表(四)——同步网络时间
  4. 【Multisim仿真】LM339过零电路仿真
  5. 【车牌识别和动态称重系统】(三)基于PyQt的UI设计
  6. Tomcat原理系列之四:Tomat如何启动spring(加载web.xml)
  7. 刻录原版系统光盘(用软碟通)
  8. SAS|where keep rename
  9. matlab画cca的图,Canoco5绘制漂亮的DCA或CCA图
  10. 业财一体化财务实操会计仿真模拟实训软件