随笔分类 - 面向对象与设计模式
摘要:(1) 应改成(2) 今天想对“变量声明在循环体外合适还是循环体内合适?”这个命题吐槽一番,并且我有两个前提:1、变量的生命周期仅限于循环体。2、仅限于Java语言。 从我迄今为止待过的两家公司来说,他们的答案都是“变量要声明在循环体外部”。why?我猜想制定这个规矩的人也许是个C/C++程序员。众
阅读全文
摘要:续上篇) 大鸟说道:“实际上没有学过设计模式去理解三层架构会有失偏颇的,毕竟分层是更高一级别的模式,所谓的架构模式。不过在程序中,有意识的遵循设计原则,却也可以有效的做出好的设计。” “不要告诉我,刚才讲的‘迪米特法则’就会在分层中用得上?”小菜说。 “当然用得上,否则讲它干吗,你当我是在安慰你而临...
阅读全文
摘要:(续上篇) 次日傍晚,小菜敲开了大鸟家的门。 “回来啦!怎么样?第一天上班感受多吧。”大鸟关心的问道。 “感受真是多哦!!!”小菜一脸的不屑一顾。 “怎么了?受委屈了吗。说说看怎么回事?” “委屈谈不上,就感觉公司氛围不是很好。我一大早就到他们公司,正好我的主管出去了不在公司。人事处的小杨让我填了表...
阅读全文
摘要:“大鸟,我们继续讨论吧!”小菜很沮丧的说。 “小伙子,不会修收音机也是很正常的,没什么大不了的,用不着丧着一个脸。好象失恋一样,男人再强也要学会说‘不’。”大鸟安慰着说,“如果你的目标是要成为修理电器专家,那么你连收音机都不会修,那是很郁闷的事。但你现在的目标是什么?” “我想成为软件架构师,编程专...
阅读全文
摘要:(续上篇)“到底如何去改良策略模式呢?”小菜恳切地问道。 “你仔细观察过没有,你的代码,不管是用工厂模式写的,还是用策略模式写的,那个分支的switch依然去不掉。原因在哪里?”大鸟反问道。 “因为程序里有下拉选择,用户是有选择的,那么程序就必须要根据用户的选择来决定实例化哪一个子类对象。无论是在客...
阅读全文
摘要:小菜次日来找大鸟,说:“《深入浅出设计模式》的第一章我看完了,它讲的是策略模式(Strategy)。『策略模式』定义了算法家族,分别封装起来,让它们之间可以互相替换, 此模式让算法的变化, 不会影响到使用算法的客户。看来商场收银系统应该考虑用策略模式?” “你问我?你说呢?”大鸟笑道,“商场收银时如何促销,用打折还是返利,其实都是一些算法,用工厂来生成算法对象,感觉是不是很怪?而最重要的是这些算法是随时都可能互相替换的,这就是变化点,而封装变化点是我们面向对象的一种很重要的思维方式。” 策略模式的结构(源自吕震宇博客) 这个模式涉及到三个角色:环境(Context)角色:持有一个Strateg
阅读全文
摘要:(续上篇) 小菜心里想:“大鸟要我做的是一个商场收银软件,营业员根据客户购买商品单价和数量,向客户收费。这个很简单,两个文本框,输入单价和数量,再用个列表框来记录商品的合计,最终用一个按钮来算出总额就可,对,还需要一个重置按钮来重新开始,不就行了?!”//声明一个double变量total来计算总计 double total = 0.0d; private void btnOk_Click(object sender, EventArgs e) { //声明一个double变量totalPrices来计算每个商品的单价(txtPr...
阅读全文
摘要:几天后,小菜跑到大鸟处,说道:“大鸟哥,今天看到一个网站,叫妙句网,是用来收藏好句子用的,网站本身没什么太多希奇,但它用的技术却是最近非常火的Flex技术,作者说他也就学了不到两个月就做出了这个网站,你说会不会是真的?如果真的是这样,我也想学学,毕竟做出来的效果比一般的网站真的要酷很多哦。”大鸟:“哦?让我来看看。”大鸟打开了浏览器,键入了小菜说的网站。“嗯?怎么是flash的?”大鸟说。小菜点头道:“Flex其实就是开发出可以在Flash Player插件上运行的编程工具!你看,它整个网站就是一个Flash,开始下载是慢了点,但下载好了,大部分操作都不用再访问网络了,局部的更新数据,也只是局
阅读全文
摘要:(续上篇) 次日,小菜再来找大鸟,问道:“你昨天说计算器这样的小程序还可以用到面向对象三大特性?继承和多态怎么可能用得上,我实在不可理解。” 大鸟:“小菜很有钻研精神嘛!好,今天我让你功力加深一级。你先要考虑一下,你昨天写的这个代码,能否做到很灵活的可修改和扩展呢?” 小菜:“我已经把业务和界面分离了呀,这不是很灵活了吗?” 大鸟:“那我问你,现在如果我希望增加一个开根(sqrt)运算,你如何改?” 小菜:“那只需要改Operation类就行了,在switch中加一个分支就行了。” 大鸟:“问题是你要加一个平方根运算,却需要把加减乘除的运算都得来参与编译,如果你一不小心,把加法运算...
阅读全文
摘要:(续上篇) 小菜:“你的意思是分一个类出来? 哦,对的,让计算和显示分开。” 大鸟:“准确的说,就是让业务逻辑与界面逻辑分开,让它们之间的耦合度下降。只有分离开,才容易达到容易维护或扩展。” 小菜:“让我来试试看。”class Encapsulation04{ static void Main(string[] args) { try { Console.Write("请输入数字A:"); string strNumberA = Console.ReadLine(); Console.Wr...
阅读全文
摘要:(续上篇) 小菜:“我明白了,他说用任意一种面向对象语言实现,那意思就是要用面向对象的编程方法去实现,对吗?OK,这个我学过,只不过当时我没想到而已。”大鸟:“所有编程初学者都会有这样的问题,就是碰到问题就直觉的用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。这其实是用计算机的方式去思考,比如计算器这个程序,先要求输入两个数和运算符号,然后根据运算符号判断选择如何运算,得到结果。这本身没有错,但这样的思维却使得我们的程序只为满足实现当前的需求,程序不容易维护,不容易扩展,更不容易复用。从而达不到高质量代码的要求。” 小菜:“鸟哥呀,我有点糊涂了,如何才能容易维护,容易扩展...
阅读全文
摘要:(续上篇) 大鸟说:“且先不说出题人的意思,单就你现在的代码,就有很多不足的地方需要改进。比如:1、变量命名,你的命名就是ABCD,变量不带有任何具体含义,这是非常不规范的;2、判断分支,你这样的写法,意味着每个条件都要做判断,等于计算机做了三次无用功;3、数据输入有效性判断等,如果用户输入的是字符符号而不是数字怎么办?4、如果除数时,客户输入了0怎么办?这些都是可以改进的地方。” “哦,说得没错,这个我以前听老师说过,可是从来没有在意过,我马上改,改完再给你看看。”class Refactor{ static void Main(string[] args) { ...
阅读全文
摘要:菜今年计算机专业大四了,学了不少软件开发方面的东西,也学着编了些小程序,踌躇满志,一心要找一个好单位。当投递了无数份简历后,终于收到了一个单位的面试通知,小菜欣喜若狂。 到了人家单位,前台小姐给了他一份题目,上面写着,“请用C++、Java、C#或VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。” 小菜一看,这个还不简单,三下五除二,10分钟不到,小菜写完了,感觉也没错误。交卷后,单位说一周内等通知吧。于是小菜只得耐心等待。可是半个月过去了,什么消息也没有,小菜很纳闷,我的代码实现了呀,为什么不给我机会呢。 小菜找到工作三年的师哥大鸟,请教原因,大
阅读全文
摘要:最近在学习设计模式,偶然在老板办公室看到一本程杰老师的《大话设计模式》,倍感新奇,略翻了一下,感觉很适合自己的口味,。,。所以对自己所看到的,所理解到的随笔记下,不足之处敬请拍砖!面向对象的4中特性:1、可维护 2、可复用 3、可扩展 4、灵活性好话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉吟道:“喝酒唱歌,人生真爽。…………”。众文武齐呼:“丞相好诗!”于是一臣子速命印刷工匠刻版印刷,以便流传天下。 样张出来给曹操一看,曹操感觉不妥,说道:“喝与唱,此话过俗,应改为‘对酒当歌...
阅读全文
浙公网安备 33010602011771号