java工厂模式_java工厂模式

java工厂模式_java工厂模式java工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式(SimpleFactoryPattern)属于类的创新型模式,又叫静态工厂方法模式(StaticFactoryMethodPattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式就是通过一个”全能类”,根据外界传递的信息来决定创建哪个具体类的对象。如下图(懒得…

大家好,又见面了,我是你们的朋友全栈君。

java工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式。

简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式就是通过一个”全能类”,根据外界传递的信息来决定创建哪个具体类的对象。如下图(懒得写demo了,知乎上截了一个。):

794452-20160906111958863-31846169.png

通过一个简单工厂类,根据name创建相应的产品对象。

关于简单类如过还有不明白,更多的资料可以参考http://blog.csdn.net/weiwenlongll/article/details/6918164。

简单工厂模式严重违背了“开闭原则”,难以拓展,由此产生了工厂方法模式。

工厂方法模式(FACTORY METHOD)是对简单工厂模式进行了抽象化,符合“开闭原则”,实现了可扩展。

工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

工厂方法模式使用场景:

如组装手机的代工厂。从手机原料工厂获取外壳、显示屏、主板、按键、电池等配件进行组装。组装手机工厂只负责手机的装配,而不负责配件的生产,也不需要关心从手机原料工厂出来的配件是否改变,只要手机各个配置衔接的接口不变就行。比如原料工厂显示屏从TFT的换成了UFB的显示屏,对于组装手机的代工厂来说,只要接口没变,只需要继续装配就行。

如下图,首先建立一个原料工厂接口,原料工厂接口分别定义了创建外壳、显示屏、主板、电池的方法。

b0b37ac082bb6b25e180d0f16860e8c9.png

LB手机原料工厂负责提供LB手机需要的配件,电池、TFT显示屏、主板、皮革外壳。

7e1c23a3e8243cb7cc581f59d7342228.png

下面是手机装配厂的接口,装配厂只负责从原料工厂获取配件并装配成新的手机,其他的概不负责。

a2b61174096c5e084e50db2de4044ad9.png

LB手机装配厂,负责装配LB原料工厂提供的配件。当然,偶尔也接接私活,装配其它手机厂的手机。

2bf74aaafdf409f53958297d4ac30cbe.png

7f647cd01380cd0059f7d4a6ef0da626.png

LB手机销量很火,在全国各地都有了装配厂。有一天LB手机的屏幕突然要进行更换了,从TFT显示屏变更成UFT显示屏。牵一发而动全身,这时候就体现出了工厂方法模式的好处。无论LB手机的配置如何变更,对于装配厂来说,createDisplay()接口依然不变。这样只需要原材料工厂的显示屏从提供TFT显示屏更换为UFT显示屏就行。

工厂模式的好处就在于提供创建的产品接口给使用者就行,无论产品的类型如何变化,只要根据接口创建的产品的功能没有变化,使用者就无须做任何变动。

很多介绍工厂方法模式的都是将工厂模式的用法列出来,而并没有具体介绍何时使用。初看时觉得工厂方法模式属于多余,增加了繁杂性,后来慢慢熟悉了工厂方法模式的用处,又重新翻阅了一遍《Head First Design Patterns》巩固一下。特模拟一个场景结合理论记录下来,希望能巩固理解。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156260.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OHEM在线难样例挖掘的两个细节

    OHEM在线难样例挖掘的两个细节代码上如何实现Read-onlyLayer与R_hard-sel权限共享?https://github.com/abhi2610/ohem/blob/master/models/pascal_voc/VGG_CNN_M_1024/fast_rcnn_ohem/train.prototxt下面代码对应(a),前向传播过程##ReadonlyRoINetworklayer{…

    2022年5月30日
    34
  • jenkins allure_Jenkins

    jenkins allure_Jenkins前言jenkins集成了allure插件,安装插件后运行pytest+allure的脚本即可在jenkins上查看allure报告了。allure安装在运行代码的服务器本机,我这里是用的dock

    2022年7月31日
    8
  • Docker安装配置教程[通俗易懂]

    Docker安装配置教程[通俗易懂]之前docker很久就写了笔记了。后面因为家里有事,耽搁了一年。现在把这部分笔记重新上传一下。大家看看。Docker要求:lunix内核,要求3.8以上centos7Docker是一个进程,一启动就两个进程,一个服务,一个守护进程。占用资源就非常少,启动速度非常快,1s。一台机器上vm,3到10个实例。docker100到10000。1.核心概念:1)镜像images,事先做好一…

    2022年10月10日
    2
  • windows10如何关闭默认共享(关闭windows默认共享)

    方法一 首先,我们右键桌面上的计算机图标,点击管理选项,如图所示。   接着,在系统工具里的共享文件选项,在右边会列出共享的内容,选择你要停止的共享,右键,选择停止即可,如图所示。   方法二   依旧是打开计算机右键,打开管理选项,然后再左侧的树状列表里找到服务选项,双击打开,如图所示。   然后,在右侧的服务列表里,找到se…

    2022年4月15日
    73
  • PyCharm使用教程 — 7、使用PyCharm进行DeBug调试

    PyCharm使用教程 — 7、使用PyCharm进行DeBug调试DeBug运行/调试Bug大家都知道是程序中的错误,导致程序不能正常运行。而DeBug的字面意思就是解决Bug。DeBug执行的方式也是有三种,与上面的代码运行章节类似,1、右键DeBug2、导航栏DeBug点击导航栏绿色的蜘蛛图标即可DeBug启动。3、通过mainDebug执行如果程序有main函数入口,可以点击左侧的绿色小三角,然后选择上图标识的Debug项目名即可。4、断点如果Debug的程序没有断点,则跟正常的执行没有区别。断点:一个断点标注一个代码行,当程序执行到

    2022年8月25日
    4
  • java老版手机游戏合集激活成功教程

    java老版手机游戏合集激活成功教程一、前言最近刚读完一本书:《Netty、Zookeeper、Redis并发实战》,个人觉得Netty部分是写得很不错的,读完之后又对Netty进行了一波很好的复习(之前用springboot+netty+zookeeper模仿dubbo做rpc框架,那时候是刚学netty后自己造的小轮子)。虽然对于Netty的使用已经比较熟悉了,而且还知道它的底层是基于JavaNIO做进一步的封装,使得并发性能和开发效率得到大大的提升。但是,对于同步阻塞、同步非阻塞、异步这

    2022年7月7日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号