简单工厂工厂方法抽象工厂策略模式策略与工厂的区别小魚人

话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi后他说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!幸运的是这种有病的现象在OO语言中可以避免了。下面以Java语言为基础来引入我们本文的主题:工厂模式!

二、简介

工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类:1.简单工厂模式(SimpleFactory)2.工厂方法模式(FactoryMethod)3.抽象工厂模式(AbstractFactory)这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。两者皆可,这本为使用《Java与模式》的分类方法。在什么样的情况下我们应该记得使用工厂模式呢?大体有两点:1.在编码时不能预见需要创建哪种类的实例。2.系统不应依赖于产品类实例如何被创建、组合和表达的细节工厂模式能给我们的OOD、OOP带来哪些好处呢??

三、简单工厂模式

这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。它由三种角色组成:工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Car接口。具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的Benz、Bmw类。

来用类图来清晰的表示下的它们之间的关系:

如果老板要坐奥迪,同理。

这便是简单工厂模式了。那么它带了了什么好处呢?首先,符合现实中的情况;而且客户端免除了直接创建产品对象的责任,而仅仅负责“消费”产品(正如暴发户所为)。下面我们从开闭原则上来分析下简单工厂模式。当暴发户增加了一辆车的时候,只要符合抽象产品制定的合同,那么只要通知工厂类知道就可以被客户使用了。(即创建一个新的车类,继承抽象产品Car)那么对于产品部分来说,它是符合开闭原则的——对扩展开放、对修改关闭;但是工厂类不太理想,因为每增加一辆车,都要在工厂类中增加相应的商业逻辑和判断逻辑,这显自然是违背开闭原则的。

而在实际应用中,很可能产品是一个多层次的树状结构。由于简单工厂模式中只有一个工厂类来对应这些产品,所以这可能会把我们的上帝类坏了。正如我前面提到的简单工厂模式适用于业务简单的情况下或者具体产品很少增加的情况。而对于复杂的业务环境可能不太适应了。这就应该由工厂方法模式来出场了!!

四、工厂方法模式抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。来用类图来清晰的表示下的它们之间的关系:

话说暴发户生意越做越大,自己的爱车也越来越多。这可苦了那位司机师傅了,什么车它都要记得,维护,都要经过他来使用!于是暴发户同情他说:我给你分配几个人手,你只管管好他们就行了!于是工厂方法模式的管理出现了。代码如下:

使用开闭原则来分析下工厂方法模式。当有新的产品(即暴发户的汽车)产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有的代码。(即当有新产品时,只要创建并基础抽象产品;新建具体工厂继承抽象工厂;而不用修改任何一个类)工厂方法模式是完全符合开闭原则的!

使用工厂方法模式足以应付我们可能遇到的大部分业务需求。但是当产品种类非常多时,就会出现大量的与之对应的工厂类,这不应该是我们所希望的。所以我建议在这种情况下使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。当然特殊的情况,就要特殊对待了:对于系统中存在不同的产品树,而且产品树上存在产品族(下一节将解释这个名词)。那么这种情况下就可能可以使用抽象工厂模式了。

五、小结

让我们来看看简单工厂模式、工厂方法模式给我们的启迪:如果不使用工厂模式来实现我们的例子,也许代码会减少很多——只需要实现已有的车,不使用多态。但是在可维护性上,可扩展性上是非常差的(你可以想象一下添加一辆车后要牵动的类)。因此为了提高扩展性和维护性,多写些代码是值得的。

六、抽象工厂模式

举例:导出成EXCEL,WORD,PDF文件的功能,这三类导出虽然具体操作略有不同,但是大部分都相同。

策略模式的优缺点

策略模式的主要优点有:

策略模式的缺点主要有两个:

适用场景

做面向对象设计的,对策略模式一定很熟悉,因为它实质上就是面向对象中的继承和多态,在看完策略模式的通用代码后,我想,即使之前从来没有听说过策略模式,在开发过程中也一定使用过它吧?至少在在以下两种情况下,大家可以考虑使用策略模式,

策略模式是一种简单常用的模式,我们在进行开发的时候,会经常有意无意地使用它,一般来说,策略模式不会单独使用,跟模版方法模式、工厂模式等混合使用的情况比较多。

THE END
1.奔驰汽车的性能优势有哪些奔驰汽车的性能优势主要体现在以下几个方面。 首先是品牌影响力,作为豪华汽车品牌,奔驰具有强大的品牌号召力,这使得其在市场上拥有较高的地位和声誉。 其次在发动机技术上,奔驰拥有多种先进的发动机。比如 M282 1.3T 直列 4 缸涡轮发动机,虽排量仅 1.3L,但性能超越前代 1.6 升发动机,采用进气歧管和排气歧管的半https://www.pcauto.com.cn/ask/621181.html
2.为什么很多人不买奔驰5. 雷达灵敏度不足。奔驰配备的倒车雷达在距离障碍物仅30厘米时方才启动,反应略显迟钝,可能会带来安全隐患。 6. 变速箱性能欠佳。在低速行驶时,奔驰的变速箱易出现顿挫,这主要是双离合变速箱的固有缺陷所致。 7. 车厢内异响问题。奔驰车内不时出现的异常噪音,对驾驶和乘坐体验均构成了不小的干扰。 https://www.yoojia.com/article/9743603704334287821.html
3.奔驰有哪些优点和缺点?懂车帝APP 选车新车二手车 打开App 4亿人用过 相关阅读https://m.dongchedi.com/article/7278735905706263055
4.奔驰smart精灵值不值得买?本文将从多个角度进行分析,为您揭示奔驰精灵Smart的优缺点,帮助您做出更明智的购车决策。第一就是外观设计,奔驰精灵Smart的外观设计无疑是它的一大亮点。小巧的车身尺寸、圆润的线条以及醒目的颜色搭配,使得Smart在城市的街头巷尾中显得格外引人注目。同时,Smart还提供了多种车身颜色和个性化配置供消费者选择,满足了https://baijiahao.baidu.com/s?id=1803265498190750561&wfr=spider&for=pc
5.奔驰C级中高级轿车奔驰C级多少钱总体来说,奔驰c级轿车舒适、精制、实用、安全性一流。如果说有缺点的话,那么就是它所表现出来的运动感稍欠于它的对手。 旅行车 当举家驾车出游已经成为有车一族选择假日出行最热门的方式时,选择怎样一款既适合城市穿行,又兼顾长途旅行的车型,成为时下大家最热议的话题。以往,SUV因为拥有卓越的操控性能,舒适的驾乘https://www.maigoo.com/citiao/156958.html
6.设计模式详解奔驰在造车… 工厂方法模式-优点: 1、下次加入大众车,只需要新建一个 DazhongFactory(大众的工厂)就行,不会影响到别的工厂。 2、可以避免创建者和具体产品之间的紧密耦合。 3、单一职责原则。 你可以将产品创建代码放在程序的单一位置,从而使得代码更容易维护。 https://blog.csdn.net/weixin_42113716/article/details/132441991
7.奔驰车钥匙丢了怎么办奔驰车钥匙丢了的办法有两个:第一个是去4S店进行重新配制,但是过程会比较的复杂,需要带齐所需要的资料(驾驶证、行驶证,买车时的相关手续);第二个是将车辆的全部锁芯进行更换,然后再进行重新配制钥匙。 车钥匙对于车辆而言是非常重要的,因为没有车钥匙是没有办法启动汽车的,非常影响汽车的正常使用。此外,如果车钥https://3g.china.com/auto/mip/1007357.html
8.奔驰车第二年保险多少钱奔驰车保险怎么买 技巧要掌握 对于奔驰车车主而言,如果想为爱车购买合适的汽车保险,还应掌握好一定的投保技巧。首先,车主们要知晓奔驰车保险的投保方式,对比分析各类投保方式的优缺点,再选择最合适的一个;然后,车主们要注意不超额投保、不重复投保等细节,这样才能为您的爱车带来良 https://www.shenlanbao.com/he/1201274
9.No.002汽车防抱死制动系统(ABS)霍尔式轮速传感器的缺点是:结构复杂,成本较高,并且工作时需要有电源电压。 2.电子控制单元 ABS电子控制模块(可以称为ABS ECU)它是一种微处理器,它使用来自传感器的输入来调节制动期间的液压,以防止车轮锁死。ABS电子控制单元(ECU)主要用于接收轮速传感器和其他传感器的输入信号,根据设定的控制逻辑,通过计算和逻辑分析https://www.360doc.cn/mip/1001004904.html
10.试驾奔驰旗舰电动轿车EQS,颠覆想象的纯电动S级轿车百闻不如一见,小编于今年4月底有幸参加了奔驰EQS试驾体验活动,通过一天与EQS的近距离接触,为大家带来了驾驶层面以及一些车辆使用方面的真实体验,也总结出了一些优缺点,希望可以分享给大家~ 先说说静态表现,奔驰EQS下压式的车头,溜背造型的车身加之四门都采用了无边框车门和隐藏式门把手,十分符合当下年轻人的审美。封https://www.d1ev.com/carnews/shijia/174317
11.奔驰B级两厢车奔驰B级两厢车价格及图片论坛评测58汽车提供奔驰B级两厢车价格及图片,性能分析,帮您在购车前全面了解奔驰(进口)奔驰B级两厢车怎么样以及优缺点,口碑数据全部由网友提供。更多奔驰B级两厢车购车优惠信息、保养维修经验尽在58汽车https://www.58che.com/3763/liangxiang/
12.宝马车宝马3系的优缺点: 优点: 外形典雅,动力强劲,操控感受一流,质量很好 缺点: 油耗较高,价格较高,后座空间相对比较少些 外观: 上一代3系列看起来修长的车身在新3系上变得更加丰满,少了些许锐气,多了一些厚重,整个车身远看酷似5系列。车身比例大体上还是延续上一代3系的长车头和短车尾,不过头灯偏向于新1系的年轻https://baike.sogou.com/v3695790.htm