【创建型】工厂模式(Factory Pattern)详解
工厂模式分为简单工厂、工厂方法、抽象工厂模式。
这一篇说一下简单工厂、工厂方法:
- 简单工厂 :用来生产同一等级结构中的任意产品。(不支持拓展增加产品)
- 工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)
简单工厂模式
什么是简单工厂模式?
简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护。
代码案例
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)详解相关推荐
- 设计模式 - 抽象工厂模式(abstract factory pattern) 详解
抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916 ...
- 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。
设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...
- 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...
- java 工厂模式详解_java 工厂模式的实例详解
java 工厂模式的实例详解 工厂方法中的"工厂"和我们平常理解的一样:用于生产产品. 而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的. ...
- 设计模式(四)——工厂模式(Factory Pattern)
工厂模式(Factory Pattern) 意义 工厂模式 实现了创建者和调用者的分离.将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性 ...
- 设计模式 - 学习笔记 - 工厂模式Factory Pattern
设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...
- 【Java设计模式】工厂模式(案例详解)
[辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...
- Spring模式系列(二) 工厂模式(Factory Pattern) - 理解Spring的第一课
factory pattern在spring的用法 Beanfactory spring框架最依赖的模式,没有之一 这也许是最多程序员使用过的模式之一,我也在我的项目中用过很多次.工厂模式贯穿于整个S ...
- java 工厂模式的写法_java工厂模式三种详解
工厂方法模式(Factory Method) 工厂方法模式分为三种: 1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 举例如下:(我们举一个发送邮件和短 ...
- 设计模式二:创建型-工厂模式
创建型模式:工厂模式 文章目录 创建型模式:工厂模式 工厂模式 1.工厂模式:介绍 2.工厂模式:模拟场景 3.工厂模式:代码实现 4.工厂模式:总结 工厂模式 1.工厂模式:介绍 工厂模式 简单工厂 ...
最新文章
- 二叉树线索化示意图_103-线索化二叉树思路图解
- python类中的属性分为类属性和实例属性两种_python中类和实例如何绑定属性与方法示例详解...
- 控制车辆运行的19个神经元
- Serverless 工程实践 | 快速搭建 Kubeless 平台
- eclipse launching workspace太慢的解决方法
- django models 文件夹
- 代码注释: (文字图案:HIRE)
- 高等数学(工本)选择题
- 设计艺术学院院长 读《未来产品的设计》这本书
- mysql备份的sql语句_Mysql主从备份和SQL语句的备份
- Windows Server 2012 R2 Update 64位 MSDN原版
- veeam虚拟机备份及恢复
- 【css默认设置】---- 关于CSS Reset 那些事(一)之 历史演变与Normalize.css
- 《惢客创业日记》2020.07.28(周二)因健忘症引发的痛点
- 三、三个路由器间的互联
- 萝卜干煎蛋,榨菜,白粥,很美丽
- Lucene.Net 实现搜索功能
- Dreamweaver2021安装教程与创建第一个网页
- Android内存检测工具
- swoole基础之http-server
热门文章
- 科技云报道:私有云市场加速洗牌,超云为何异军突起?
- ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)
- java cloud五大神兽_SpringCloud五大神兽之Eureka
- angularjs表单验证_AngularJS表单验证
- android浪漫樱花凋零动态壁纸应用源码
- 苏泊尔搭载华为鸿蒙系统,苏泊尔小C主厨料理机体验:华为鸿蒙系统加持,融汇多种功能...
- 计算机病毒实训,2021计算机病毒实验报告
- 腾讯内部转岗_如何一句话证明你在腾讯工作过
- CENTOS7 安装eclipse应用
- webug 3、延时注入