工厂模式分为简单工厂、工厂方法、抽象工厂模式。

这一篇说一下简单工厂、工厂方法:

  • 简单工厂 :用来生产同一等级结构中的任意产品。(不支持拓展增加产品)
  • 工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)

简单工厂模式

什么是简单工厂模式?

简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护。

代码案例

1. 创建工厂

package com.lijie;public interface Car {public void run();
}

2. 创建工厂的产品(宝马奥迪)

package com.lijie;public class Bmw implements Car {public void run() {System.out.println("我是宝马汽车...");}
}
package com.lijie;public class AoDi implements Car {public void run() {System.out.println("我是奥迪汽车..");}
}

3.创建核心工厂类,由他决定具体调用哪产品

package com.lijie;public class CarFactory {public static Car createCar(String name) {if ("".equals(name)) {return null;}if(name.equals("奥迪")){return new AoDi();}if(name.equals("宝马")){return new Bmw();}return null;}
}

4.演示创建工厂的具体实例

package com.lijie;public class test01 {public static void main(String[] args) {Car aodi =CarFactory.createCar("奥迪");Car bmw =CarFactory.createCar("宝马");aodi.run();bmw.run();}
}

优缺点

优点:
1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

工厂方法模式

什么事工厂方法模式?

工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。
该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节

代码案例:

1. 创建工厂

package com.lijie;public interface Car {public void run();
}

2.创建工厂方法调用接口(所有的产品需要new出来必须继承他来实现方法)

package com.lijie;public interface CarFactory {Car createCar();
}

3.创建工厂的产品(宝马奥迪)

package com.lijie;public class Bmw implements Car {public void run() {System.out.println("我是宝马汽车...");}
}
package com.lijie;public class AoDi implements Car {public void run() {System.out.println("我是奥迪汽车..");}
}

4.创建工厂方法调用接口的实例

package com.lijie;public class AoDiFactory implements CarFactory {public Car createCar() {return new AoDi();}
}
package com.lijie;public class BmwFactory implements CarFactory {public Car createCar() {return new Bmw();}
}

5.演示创建工厂的具体实例

package com.lijie;public class test02 {public static void main(String[] args) {Car aodi = new AoDiFactory().createCar();Car jili = new BmwFactory().createCar();aodi.run();jili.run();}
}

优缺点

缺点:
每一种品牌对应一个工厂子类,在创建具体键盘对象时,实例化不同的工厂子类。但是,如果业务涉及的子类越来越多,这样会使得系统中类的个数成倍增加,增加了代码的复杂度。

优点:
有点跟简单工厂模式差不多,但是不需要加很多ifesle。

【创建型】工厂模式(Factory Pattern)详解相关推荐

  1. 设计模式 - 抽象工厂模式(abstract factory pattern) 详解

    抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916 ...

  2. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

  3. 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

    工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...

  4. java 工厂模式详解_java 工厂模式的实例详解

    java 工厂模式的实例详解 工厂方法中的"工厂"和我们平常理解的一样:用于生产产品. 而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的. ...

  5. 设计模式(四)——工厂模式(Factory Pattern)

    工厂模式(Factory Pattern) 意义 工厂模式 实现了创建者和调用者的分离.将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性 ...

  6. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

  7. 【Java设计模式】工厂模式(案例详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  8. Spring模式系列(二) 工厂模式(Factory Pattern) - 理解Spring的第一课

    factory pattern在spring的用法 Beanfactory spring框架最依赖的模式,没有之一 这也许是最多程序员使用过的模式之一,我也在我的项目中用过很多次.工厂模式贯穿于整个S ...

  9. java 工厂模式的写法_java工厂模式三种详解

    工厂方法模式(Factory Method) 工厂方法模式分为三种: 1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 举例如下:(我们举一个发送邮件和短 ...

  10. 设计模式二:创建型-工厂模式

    创建型模式:工厂模式 文章目录 创建型模式:工厂模式 工厂模式 1.工厂模式:介绍 2.工厂模式:模拟场景 3.工厂模式:代码实现 4.工厂模式:总结 工厂模式 1.工厂模式:介绍 工厂模式 简单工厂 ...

最新文章

  1. 二叉树线索化示意图_103-线索化二叉树思路图解
  2. python类中的属性分为类属性和实例属性两种_python中类和实例如何绑定属性与方法示例详解...
  3. 控制车辆运行的19个神经元
  4. Serverless 工程实践 | 快速搭建 Kubeless 平台
  5. eclipse launching workspace太慢的解决方法
  6. django models 文件夹
  7. 代码注释: (文字图案:HIRE)
  8. 高等数学(工本)选择题
  9. 设计艺术学院院长 读《未来产品的设计》这本书
  10. mysql备份的sql语句_Mysql主从备份和SQL语句的备份
  11. Windows Server 2012 R2 Update 64位 MSDN原版
  12. veeam虚拟机备份及恢复
  13. 【css默认设置】---- 关于CSS Reset 那些事(一)之 历史演变与Normalize.css
  14. 《惢客创业日记》2020.07.28(周二)因健忘症引发的痛点
  15. 三、三个路由器间的互联
  16. 萝卜干煎蛋,榨菜,白粥,很美丽
  17. Lucene.Net 实现搜索功能
  18. Dreamweaver2021安装教程与创建第一个网页
  19. Android内存检测工具
  20. swoole基础之http-server

热门文章

  1. 科技云报道:私有云市场加速洗牌,超云为何异军突起?
  2. ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)
  3. java cloud五大神兽_SpringCloud五大神兽之Eureka
  4. angularjs表单验证_AngularJS表单验证
  5. android浪漫樱花凋零动态壁纸应用源码
  6. 苏泊尔搭载华为鸿蒙系统,苏泊尔小C主厨料理机体验:华为鸿蒙系统加持,融汇多种功能...
  7. 计算机病毒实训,2021计算机病毒实验报告
  8. 腾讯内部转岗_如何一句话证明你在腾讯工作过
  9. CENTOS7 安装eclipse应用
  10. webug 3、延时注入