(老鸟略过)
之前的一篇简单方法模式连接地址
http://ysen.iteye.com/admin/blogs/542437
先来说说简单方法模式明显的优缺点
优点:将不同的业务实例在工厂内部实现,客户端只需要传个String类型的值就ok
缺点:如果增加新的女友(业务类型)那么就要修改switch分支条件(我这里用的if..else判断)这就破坏了设计模式的开放封闭原则,工厂方法模式就是解决这个问题的办法之一(不知道还有没有其它的方法忘高手指教)
在这里感谢hankesi2000的热心回帖
hankesi2000在上篇简单工厂方法中已经提到了工厂方法,我在这里顺便整理了下
下面是创建的对象的 接口
//基类
public class DreamGirl {
public void can_do_something_for_boy(){
}
}
下面都是具体实现
public class BeautifulGirl extends DreamGirl {
public void can_do_something_for_boy() {
System.out.println("陪老公逛街!!!");
}
}
public class LivelyGirl extends DreamGirl {
public void can_do_something_for_boy() {
System.out.println("陪老公聊天!!!");
}
}
public class LooksMediocreGirl extends DreamGirl {
public void can_do_something_for_boy() {
System.out.println("给老公做饭!!!");
}
}
public class SensibleGirl extends DreamGirl {
public void can_do_something_for_boy() {
System.out.println("给老公洗衣服!!!");
}
}
//接口:
public interface GirlFactory{
DreamGirl creatDreamGirl();
}
public class BeautifulGirlFactory implements GirlFactory{
public DreamGirl creatDreamGirl(){
return new BeautifulGirl();
}
}
public class LivelyGirlFactory implements GirlFactory{
public DreamGirl creatDreamGirl(){
return new LivelyGirl();
}
}
public class LooksMediocreGirlFactory implements GirlFactory{
public DreamGirl creatDreamGirl(){
return new LooksMediocreGirl();
}
}
public class SensibleGirlFactory implements GirlFactory{
public DreamGirl creatDreamGirl(){
return new SensibleGirl();
}
}
这样就是工厂方法了
现在来比较下简单工厂和工厂方法的优点缺点
首先比较客户端的调用(调用不同的业务女友一次):
a客户端调用简单工厂的话,客户端不需要知道工厂内部的实现,用户只需要传个字符串就能实例化具体的业务对象并调用具体的业务方法,这是简单工厂的优点。
b客户端调用工厂方法的话,显然将之前简单方法的中switch分支(业务判断)提到了客户端去判断了,显然不是我们所想要的。(这里利用反射可以解决该弱点)
设计模式的开放封闭原则:
上面说过了这是简单方法的缺点,但是工厂方法做到了这点,如果有新的女友加进来,那么so easy,只要加个新女友的 工厂方法就OK了 完全符合开放封闭的原则,完全不需要该switch。
这里还有个比较(调用一个业务女友多次):
简单工厂的话
//如果业务需求是这样子,需要调用多个同样类型的女友
DreamGirl girl1= new DreamGirlCreatFactory().creatDreamGirl(BeautifulGirl);
girl1.can_do_something_for_boy();
DreamGirl girl2= new DreamGirlCreatFactory().creatDreamGirl(BeautifulGirl);
girl2.can_do_something_for_boy();
DreamGirl girl3= new DreamGirlCreatFactory().creatDreamGirl(BeautifulGirl);
gir3.can_do_something_for_boy();
那么现在要将BeautifulGirl改成调用SensibleGirl 怎么办
要改好多,重复的太多代码就有了坏味道,经验告诉我们需要进行重构
看下工厂方法是怎么做的
GirlFactory girlFactory = new BeautifulGirlFactory();
DreamGirl girl1 = girlFactory.creatDreamGirl();
DreamGirl girl2 = girlFactory.creatDreamGirl();
DreamGirl girl3 = girlFactory.creatDreamGirl();
girl1.can_do_something_for_boy() ;
girl2.can_do_something_for_boy() ;
gir3.can_do_something_for_boy() ;
现在我们要将BeautifulGirl 改成SensibleGirl 那么客户端只需要改
GirlFactory girlFactory = new SensibleGirlFactory();就ok了
关键还是看需求选用不同的方法
hankesi2000 两种模式融合在一起也是非常不错的选择哈。
分享到:
相关推荐
找女朋友的方法-PMP方法论 PMP方法论是一种系统化、结构化的方法,旨在帮助个人找到自己的爱情。这种方法论将问题解决分为八个步骤:明确问题、了解现状、设定目标、把握真因、制定对策、实施对策、评价结果和过程...
很抱歉,但这个文件的内容并不是关于IT行业的知识,而是关于如何寻找女朋友的个人发展和情感管理策略。这个PPT提供了一种系统化的方法来改善与潜在伴侣的关系,包括明确目标、了解现状、设定标准、制定策略、执行...
标题中的“前端网页+h5+js 用于送给女朋友”表明这是一个使用HTML5和JavaScript技术制作的前端网页项目,目的可能是为了庆祝女朋友的生日或者作为特别的礼物。HTML5是超文本标记语言的最新版本,提供了许多增强用户...
一个简单的C#WinForm窗体包含3个功能,由3个按钮分别实现: ...适合给哄女朋友开心或者用来表白,程序设计非常简单属于一看就会的内容,这个只是一个dome,后续计划有一个完善整合的哄女朋友开心的窗体程序
标题中的“前端动效告白女朋友神器,网页HTML”指的是一个使用前端技术制作的互动告白页面,通过HTML、CSS和JavaScript实现动态效果,旨在给女朋友带来惊喜。这个项目的核心在于利用网页的交互性来表达情感,使得...
标签"表白女朋友 网页 情人节"表明这个项目具有浪漫和情感传达的目的,因此网页设计需要注重情感表达和用户体验。设计师可能需要运用浪漫色彩搭配,比如粉色、红色调,以及心形等爱情符号。同时,交互设计也需要考虑...
图片[2]-运用微信公众号完成女朋友恋爱专属音讯推送php源码-源码库 这里需求记住的是对应的微信号,也就是user id,后面会用到 接下来就是新增测试模板,阐明:模板标题就是接到推送音讯的标题,需求自定义,例如:...
工厂方法模式的核心思想就是将对象的创建过程封装起来,让客户端可以无须知道对象的具体创建过程,只关注对象的使用。 总结来说,这个PHP实现的工厂模式设计日志记录器示例展示了如何利用设计模式提高代码的可维护...
程序员送给女友的基于JavaScript的高端3D相册源码程序员送给女友的基于JavaScript的高端3D相册源码程序员送给女友的基于JavaScript的高端3D相册源码程序员送给女友的基于JavaScript的高端3D相册源码程序员送给女友的...
表白源码送女朋友
在这个“女朋友感动到哭的礼物--3d动态女友相册”项目中,程序员利用技术为心爱的人创造了一个特别的情人节惊喜。这个3D动态相册是一个创新且浪漫的方式,通过编程技巧将静态照片转化为生动的动态展示,旨在触动情感...
综上所述,系统方法教你找到女朋友是一套综合性的策略,它涵盖了目标设定、现状分析、计划制定、行动实施和效果评价等多个环节。它强调目标意识、分析能力和持续的反思调整,这不仅有助于找到理想的伴侣,更是一种...
给女朋友做的微信公众号消息每日自动推送天气及纪念日通知教程,该教程为github每日自动线上运行版本。本人亲测妹子很喜欢~女孩子都喜欢这种用心做的东西! 1.最新版本 成品 +源码 +消息模板 (需要自己申请 天行 ...
程序小,用意深。。。不要怕麻烦,喜欢创意的朋友应该看一看……
在当今移动设备普及的时代,为女朋友制作一款专属的小游戏,无疑是一种充满创意和心意的浪漫表达。本篇将详细讲解如何使用Java的LibGDX游戏引擎来制作这样的小游戏,帮助你实现这个温馨的想法。 LibGDX是一个开源的...
在这个特别的【标题】"女朋友的生日礼物"中,我们可以看到一个工科男选择通过电子设计来展现他的浪漫情怀。这种创意方式不仅展现了技术的魅力,也体现了个人的情感投入,是科技与情感的完美结合。 首先,我们要理解...
标题中的“把这个调皮的程序送给女朋友”暗示了一个趣味性的软件或小程序,可能是为了娱乐或惊喜。这类程序可能包含互动元素,比如个性化问候、趣味动画或者是定制化的互动体验。描述中的“请先测试保证有效,绝非...
送给女朋友的源码
总的来说,用Java制作女朋友的生日礼物,不仅体现了Java的多功能性,也展现了程序员的创新精神和对细节的关注。这样的项目不仅能够学习到实际的编程技巧,还能增进与他人的感情联系,使技术与生活更加紧密地结合在...
在这个"js 女朋友相册"项目中,程序员利用JS的动态特性,为女朋友创造了一个独特的3D相册,旨在提供一种新颖且互动的方式来展示照片。这种3D相册能够从多个角度立体地展示图片,给浏览者带来更丰富的视觉体验。 ...