定义
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
UML图
个人理解:比如一个A类中定义了若干方法,而在另一个B类中需要调用A类其中的一个方法,当然,我们可以直接 new,但是,这样做的结果就是将A类的所有方法都引用了进来,此时,不仅违背了java面对对象的编程思想,还与A类的复杂构造逻辑耦合。但是如果我们此时向A类中传递一个参数或多个参数,只引用我们所需要的的方法,此时需要创建一个接口。这种模式便称之为工厂模式。它能够有效的避免方法的暴露。当然,根据业务逻辑而定。
分类
代码以生产手机和 PAD 为例:
手机车间
生产手机的机器
1、简单工厂:
简单工厂模式其实不是一个设计模式,反而比较像一种编程习惯。主要我们定义一个非常简单的类主要负责帮我们生产不同的产品
测试
结果
苹果手机开始生产...1
2、简单工厂(反射实现):
利用反射Class.forName(clz.getName()).newInstance()实现的简单工厂
测试
结果
华为手机开始生产...1
3、方法工厂
通过定义不同的方法,然后随机调用实现,例如 Controller 层调用 Servers 层中的方法。
测试
结果
三星手机开始生产...1
4、普通工厂
把简单工厂中具体的工厂类,划分成两层:抽象工厂层+具体的工厂子类层
测试
结果
三星手机开始生产...1
5、抽象工厂
用于多个产品一起生产。为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类
测试
结果
比较
内容 | 简单工厂 | 简单工厂(反射) | 方法工厂 | 普通工厂 | 抽象工厂 |
---|---|---|---|---|---|
特点 | 一个具体的类,通过createPhones方法利用if或者 switch创建产品并返回,静态 | 一个具体的类,通过createPhones方法利用反射机制生成对象返回 | 不同产品,提供不同的生产方法 | 把简单工厂中具体的工厂类,划分成抽象工厂层和具体的工厂子类层 | 多产品系 |
优点 | 简单,易理解 | 较简单工厂,代码简单 | 容错率高,方便 | 松耦合,面向对象(具体方法) | 面向对象,多产品实现共同生产 |
缺点 | 扩展性差,紧耦合 | 使用发射,效率低下 | 代码较复杂 | 每次新增一个具体产品类,也要同时新增一个具体工厂类 | 容易造成紧耦合 |
THE END
推荐阅读:中国驰名商标网
-
河南开封最有名的文物是一座琉璃塔,历经37次
随着新春佳节的临近,很多人的过年方式也在慢慢的转变,从以前只在自己家里呆着,变成了去旅游过年,感受不同地方的年俗是一件很有趣的事情,这一次我们的旅行来到了千年古...
2020-03-18 -
阳春三月河南最适合登山踏青的地方,赶快去浪吧
阳光明媚,春暖大地,春天已经正式到来啦!结束了一个冬天的沉寂之后,万物生机盎然,一草一木都开始慢慢展现出活力,漫山遍野的鲜花也竞相开放。阳春三月好时节,正是适合...
2020-03-18 -
广州南沙的这些景点你都知道吗?邂逅南沙,一起
邂逅南沙,作为粤港澳大湾区的核心地带,你知道这里都有哪些景点吗?如果还不知道赶紧来瞧瞧吧!No.1 南沙湿地景区南沙湿地景区位于广州最南端,地处珠江入海口西岸的...
2020-03-18 -
河南也有“九寨沟”,素有“中原最美瀑布”的美
每天穿梭于城市的喧嚣中,你是否也曾想过要逃离?世界这么大,去看看和现在不一样的生活,体验一下陶渊明笔下的“世外桃源”,游一游欧阳修所爱的山水,正所谓“醉翁之意不...
2020-03-18 -
中国中部最后的香格里拉,湖北唯一的羌寨,被遗
在中国湖北省西南部有一个咸丰县,有湖北“西大门”之称,在咸丰县藏着依山而建的民居,让人流连忘返的村落-麻柳溪村,麻柳溪山清水秀,空气清新,享有中国中部最后的一个...
2020-03-18 -
大饱眼福,一套赏心悦目的小屋,无论是做民宿或
如今木屋越来越受大众欢迎,今天来给大家介绍一款小木屋,无论是作为自用度假,或者作为民宿都十分合适。这栋小木屋别墅分为上下两层,生活设备齐全,一楼为厨房跟客厅,卫...
2020-03-18