java工厂模式_java工厂模式
java工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式。
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式就是通过一个"全能类",根据外界传递的信息来决定创建哪个具体类的对象。如下图(懒得写demo了,知乎上截了一个。):
通过一个简单工厂类,根据name创建相应的产品对象。
关于简单类如过还有不明白,更多的资料可以参考http://blog.csdn.net/weiwenlongll/article/details/6918164。
简单工厂模式严重违背了“开闭原则”,难以拓展,由此产生了工厂方法模式。
工厂方法模式(FACTORY METHOD)是对简单工厂模式进行了抽象化,符合“开闭原则”,实现了可扩展。
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
工厂方法模式使用场景:
如组装手机的代工厂。从手机原料工厂获取外壳、显示屏、主板、按键、电池等配件进行组装。组装手机工厂只负责手机的装配,而不负责配件的生产,也不需要关心从手机原料工厂出来的配件是否改变,只要手机各个配置衔接的接口不变就行。比如原料工厂显示屏从TFT的换成了UFB的显示屏,对于组装手机的代工厂来说,只要接口没变,只需要继续装配就行。
如下图,首先建立一个原料工厂接口,原料工厂接口分别定义了创建外壳、显示屏、主板、电池的方法。
LB手机原料工厂负责提供LB手机需要的配件,电池、TFT显示屏、主板、皮革外壳。
下面是手机装配厂的接口,装配厂只负责从原料工厂获取配件并装配成新的手机,其他的概不负责。
LB手机装配厂,负责装配LB原料工厂提供的配件。当然,偶尔也接接私活,装配其它手机厂的手机。
LB手机销量很火,在全国各地都有了装配厂。有一天LB手机的屏幕突然要进行更换了,从TFT显示屏变更成UFT显示屏。牵一发而动全身,这时候就体现出了工厂方法模式的好处。无论LB手机的配置如何变更,对于装配厂来说,createDisplay()接口依然不变。这样只需要原材料工厂的显示屏从提供TFT显示屏更换为UFT显示屏就行。
工厂模式的好处就在于提供创建的产品接口给使用者就行,无论产品的类型如何变化,只要根据接口创建的产品的功能没有变化,使用者就无须做任何变动。
很多介绍工厂方法模式的都是将工厂模式的用法列出来,而并没有具体介绍何时使用。初看时觉得工厂方法模式属于多余,增加了繁杂性,后来慢慢熟悉了工厂方法模式的用处,又重新翻阅了一遍《Head First Design Patterns》巩固一下。特模拟一个场景结合理论记录下来,希望能巩固理解。
java工厂模式_java工厂模式相关推荐
- java mvc模式_Java MVC模式
MVC模式表示:模型 -视图 - 控制器模式.此模式用于分离应用程序的问题. 模型(Model) - 模型表示携带数据的对象或JAVA POJO.如果其数据改变它也可以具有逻辑来更新控制器. 视图(V ...
- 状态模式java 在线投票_Java 状态模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模 ...
- java dao模式_Java DAO 模式
DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问.通俗来讲,就是将数据库操作都封装起来. 对外提供相应的接口 在面向对象 ...
- java动态代理_Java代理模式及动态代理详解
Java的动态代理在实践中有着广泛的使用场景,比如最场景的Spring AOP.Java注解的获取.日志.用户鉴权等.本篇文章带大家了解一下代理模式.静态代理以及基于JDK原生动态代理. 代理模式 无 ...
- java 值对象_java 中设计模式(值对象)的实例详解
java 中设计模式(值对象)的实例详解 应用场景:在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互?这个时候就需要用到我们的值对象设 ...
- java单态模式_Java单态模式
Java的单态模式 Singletom 作用:保证在Java应用程序中,一个Java类只有一个实例存在:所以一般单态类会提供一个返回该类实例的方法.提供一个对对象的全局访问指针. 优点:节省内存,限制 ...
- 策略模式java 用例_java策略模式简单用例
运用java策略模式一个小程序 /** * */ package Strategy; import java.util.Arrays; /** * @author HuangRong * @Funti ...
- java 模板模式_Java模板模式(Template模式)
Java模板模式(Template模式) 下一节> Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使 ...
- java state用法_Java状态模式(State模式)
State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elsei ...
- java atm模拟系统_Java RPC模式开发一个银行atm模拟系统
采用rpc模式开发一个银行atm模拟系统. 系统主要提供一个服务Card,该服务接口可以提供登录.查询.取钱.存钱等功能.服务接口的设计和实现自定义. Atm客户端功能需求: 1.ATM可以实现用户登 ...
最新文章
- 安装Docker和下载images镜像和常用Docker命令
- 计算当前日期是一年中的第几周
- 一本彻底搞懂MySQL索引优化EXPLAIN百科全书
- 【Servlet】Cookie应用:显示上次访问页面时间
- netty系列之:自定义编码和解码器要注意的问题
- JS高级——内存管理和闭包
- Leetcode--50. Pow(x,y)
- 对团队成员公开感谢博客
- 将两个不同格式的XML文件,进行节点对照,并生成一个用于对照功能的XML
- javaWeb过滤器——Filter
- WPS导入SQLSERVER的数据
- c语言函数实现数组输入输出
- spring boot actuator和K8s容器健康检查
- 向上滚动的文字的淡入淡出效果
- NAO学习第二周——NAOqi Audio
- python编程题13-蒙特·卡罗方法计算圆周率
- 论坚持的力量-知耻后勇
- RSA 非对称加密【转】
- 第十二章 牛市股票还会亏钱-外观模式(读书笔记)
- IEC 61851-1 协议