范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java设计模式之工厂方法模式

  一、概述
  工厂,就是生产产品的地方。
  在Java设计模式中使用工厂的概念,那就是生成对象的地方了。
  本来直接就能创建的对象为何要增加一个工厂类呢?
  这就需要了解工厂方法要解决的是什么问题了,如果只有一个类,我们直接new一个对象完事,这是最简单的;但是如果有多个类呢,而且这些类还需要针对不同的情况来创建不同的对象,这时候就需要工厂了,我们可以在工厂中根据条件来创建具体的对象。
  这样一来就将调用方和具体的目标类进行了解耦,调用方根本就不知道需要创建哪个对象,它只是提出了条件,然后工厂就可以根据给定的条件来决定创建哪一个对象。二、简单工厂方法模式
  要说工厂方法模式,不得不先了解下简单工程方法模式,这个模式并不是23种设计模式中的内容。
  所谓简单工厂方法模式,就是为目标类创建一个工厂,当有多个目标实现的时候,在这个工厂内部进行逻辑判断来根据条件创建不同的目标实例。
  下面看个例子,我就以桌子为例来写:
  桌子接口:Desk/**  * 桌子接口  */ public interface Desk {     String getType(); }
  木质桌子:WoodenDesk/**  * 木质桌子  */ 	public class WoodenDesk implements Desk{     private String type = "木质桌";     @Override     public String getType() {         return type;     } }
  塑料桌子:PlasticDesk/**  * 塑料桌  */ public class PlasticDesk implements Desk {     private String type = "塑料桌";     @Override     public String getType() {         return type;     } }
  类型枚举:Type/**  * 类型  */ public enum Type {     PLASTIC,WOODEN; }
  桌子工厂:DeskFactory/**  * 桌子工厂  */ public class DeskFactory {     public static Desk createDesk(Type type) {         switch (type) {             case WOODEN:                 return new WoodenDesk();             case PLASTIC:                 return new PlasticDesk();             default:                 return null;         }     } }
  测试类:Clienter/**  * 测试类  */ public class Clineter {     public static void main(String[] args) {         Desk desk = DeskFactory.createDesk(Type.PLASTIC);         System.out.println(desk.getType());     } }
  执行结果塑料桌
  这就是简单工厂方法,只有一个工厂类来面向多个目标实现。当目标实现增多时,我们不得不去修改工厂类的方法,使其兼容新的实现类型,这明显违背了开闭原则,所以出现了工厂方法模式。三、工厂方法模式
  工厂方法模式是对简单工厂模式的抽象升级,将工厂这个概念抽象出来成为接口,然后针对每种目标实现类创建一个工厂实现,一对一来实现,当新增了目标实现,只要同时新增一个工厂实现即可。
  下面看看实例:
  桌子接口:Desk/**  * 桌子接口  */ public interface Desk {     String getType(); }
  木质桌子:WoodenDesk/**  * 木质桌子  */ public class WoodenDesk implements Desk{     private String type = "木质桌";     @Override     public String getType() {         return type;     } }
  塑料桌子:PlasticDesk/**  * 塑料桌  */ public class PlasticDesk implements Desk {     private String type = "塑料桌";     @Override     public String getType() {         return type;     } }
  桌子工厂接口:DeskFactory/**  * 桌子工厂接口  */ public interface DeskFactory {     Desk createDesk(); }
  木质桌子工厂:WoodenDeskFactory/**  * 木质桌子工厂  */ public class WoodenDeskFactory implements DeskFactory{     @Override     public Desk createDesk(){         return new WoodenDesk();     } }
  塑料桌子工厂:/**  * 塑料桌子工厂  */ public class PlasticDeskFactory implements DeskFactory {     @Override     public Desk createDesk() {         return new PlasticDesk();     } }
  测试类:Clienter/**  * 测试类  */ public class Clienter {     public static void main(String[] args) {         DeskFactory factory = new WoodenDeskFactory();         Desk desk = factory.createDesk();         System.out.println(desk.getType());     } }
  执行结果:木质桌四、解析
  从上面的实例中可以很容易看出来,工厂方法模式的重点就在这个工厂接口了。
  目标可以无限扩展,工厂类也要随之扩展,一对一存在,满足了开闭原则,但如果目标实现较多,工厂实现类也会增多,不简洁。
  就我实际情况下看到的,在MyBatis中使用的比较多:事务模块和数据源模块都使用了工厂方法模式。

企业应该如何保护数据库安全?新网云资讯随着大数据云服务等领域的不断发展,数据量不断的扩大,数据泄漏涉及的行业也愈加广泛,据统计,全球受数据泄露影响最为严重的行业有金融政府制造电商教育医疗等,一旦发生损失惨重。个人邮箱能收发,为什么还要用企业邮箱?新网邮箱资讯个人邮箱最让人苦恼的莫过于收到的垃圾邮件病毒邮件,严重影响办公效率,再者也容易泄露公司企业的重要信息,领导管理也很不方便。为了提升工作效率,形成更好的办公交流环境,越来IPv6网络高速公路已建成,你的网站升级了吗?新网网站建设资讯工业和信息化部中央网络安全和信息化委员会办公室近日印发IPv6流量提升三年专项行动计划(20212023年)(简称计划)。计划明确了未来三年的重点发展任务,标志着我购买老域名,对于网站优化有哪些好处?新网域名资讯老域名,顾名思义就是注册时间较长且是别人建站使用过的域名。一个优质且无黑历史的老域名可以帮助企业在建站时获得更好的排名和收录,同时在权重外链信任度上均有优势,还可以最大新网科普如何避免网站侵权的坑?在互联网时代,人们不仅是信息的接受者,还成为信息的传播者,尤其是在企业网站和自媒体平台。人们在传播信息的过程中,也许某些行为就构成了侵权。那么,在日常生活中,哪些行为可能导致侵权?Mac自定义应用快捷键解决PixelmatorPro没有到导出快捷键的问题今天小编发现一件非常有趣的事情,嗯就PixelmatorProMac版是没有给导出的快捷键,每次都要去菜单栏手动文件导出,是不是很多人像小编一样非常的嫌弃这一点呢?接下来小编给你带使用Mac电脑的词典应用小技巧在苹果Mac电脑的字典中大家喜欢安装多款不同类型的字典,今天小编详细介绍一下Mac内置字典的用法和技巧,下面就介绍一下如何设置苹果Mac电脑的词典应用中语言种类。首先,在应用程序里Mac电脑使用你无法拒绝的Mac触发角正确使用Mac上的触发角(HotCorners)功能对于日常工作学习效率有极大的提升,但是很多新接触MACOS系统的用户估计对触发角都感到很陌生,现在MACW小编给大家介绍一下MATwitterrific常用快捷键有哪些?Twitterrific使用小技巧TwitterrificforMac是Mac平台上非常优秀的一款应用,你轻松阅读并撰写推文,还支持通知中心Retina显示屏内置共享美观动画全屏模式等实用功能,小编今天为大家总结了租房的快乐租房的快乐随身wifi的快乐星球毕业在外边自己租了个房子,手机话费套餐每个月99元40G,另外一张卡是那种大王卡,每个月也要19元,我下了班没别的爱好,就爱煲剧刷视频有时候还要电脑7。98万起,瓦罐姿态1。5T动力,空间懂家用旅行,解读宝骏Valli预算10万左右落地,在懂家用又懂自驾的前提下,你们会怎么选呢?相信不少朋友都会将目光锁定在SUV上,比如哈弗H6吉利博越等。确实,这两台车的影响力口碑和销量,都很一定亮点,够大的空
比亚迪四季度推高端车!售5080万,比特斯拉ModelSX还贵根据此前规划,比亚迪将在未来12年内推出旗下的高端品牌。近日在比亚迪高层沟通会上,比亚迪汽车品牌及公关事业部总经理李云飞表示,比亚迪将在今年四季度发布一款高端车型,售价区间在50万2021年618哪一款手机最值得买?高性价比手机推荐和选购指南本篇文章从千元价位逐步以上推荐,有预算的各位直接滑倒自己喜欢的地方即可。千元机推荐学生党与老年机首选!RedmiNote94G到手价899元亮点4GB128GB6000mAh大电池华为鸿蒙HarmonyOS2正式使用手机多设备组成超级终端6月2日,华为鸿蒙HarmonyOS2及华为全场景新品发布举行,华为最新操作系统HarmonyOS2系统开始在MateP等多款手机MatePad平板等设备上推送。同时,华为公布了H2021年值得入手的几款最佳Android手机1)三星GalaxyS21Ultra如果您想要在设计规格性能和相机性能方面做到最好,那么三星GalaxyS21Ultra与目前在Android领域中的表现差不多。与Apple的iP百亿补贴两周年拼多多关心两件事消费普惠与农业回家乡两年了,卖苹果最好的时候每月能赚3万。山西运城万荣县是全国知名的苹果产区,范腾达自小家境贫困,一早离开家乡,成为北漂打工者。前几年,范腾达在好友的带领下,放弃北漂回到家乡万荣华为发布多款搭载HarmonyOS2的新产品,百款设备启动升级6月2日,华为发布多款搭载HarmonyOS2的新产品,包括HUAWEIMate40系列新版本MateX2新版本HUAWEIWATCH3系列HUAWEIMatePadPro等手机智HarmonyOS2发布会最全预测,除了操作系统还有哪些看点?HarmonyOS2发布会在6月2号,马上就要来了。有关于HarmonyOS大家都有自己的理解和猜想,也因为HarmonyOS之前的发布会都是面对开发者,面对技术人员,介绍那些枯燥蔚来小鹏销量大增宁德时代估值面临挑战金融投资网记者刘敏6月1日,造车新势力先后发布了5月份交付量数据。其中,蔚来小鹏汽车5月交付量分别同比增长95。3483,均超市场预期。受此影响,蔚来股价大涨9。63,小鹏汽车股价顺丰被指抄袭背后,不甘同质化的同城配送平台们正忙着内卷当大跨界时代来临,巨头们扎堆涌入同城配送赛道,市场上还保持着独立性的创业公司们终于坐不住了5月28日,UU跑腿官博在微博上发布文章关于对顺丰同城急送产品及设计团队发展的几条建议,直新能安渠道锂电池新品即将正式上市,用技术领先开启行业锂电盛宴自5月上旬正式亮相电动车行业以来,新能安(Poweramp)锂电就成为业界关注的重点话题,有不少经销商更是纷纷在后台留言想要了解新能安的加盟方式和相关产品技术情况。另外,社长今天刚离婚风波后,看了不起的盖茨比如何跌落神坛比尔盖茨离婚!近日,比尔盖茨在推特上发布声明,宣布与夫人梅琳达盖茨结束长达27年的婚姻。离婚内幕一波接着一波涌出来,比尔盖茨的风流情史结婚还要请示前女友结了婚还要和前女友定期相聚和