Design Pattern
iteye_14216
这个作者很懒,什么都没留下…
展开
-
Yet another Iterator VS visitor
在论坛中有好几位同学都比较了Iterator和visitor模式,我也小小总结一下:Iterator和visitor模式都是对对象聚集进行访问,并对访问的元素进行操作,它们都是把访问的职责从集合\元素类中分离出来。但Iterator在遍历集合、树形结构时,往往只是遍历元素,而对元素的操作通常在其职责之外,并且在一个遍历过程外在的对元素操作通常是单一的至少不会是每个元素一种不同的...2008-02-29 15:13:04 · 107 阅读 · 0 评论 -
对象健身操
看了一下ThoughtWorks文集中的对象健身操一章,写了九部迈向优秀的设计,记录一下:1、方法只使用一级缩进这个可以尽可能的写更小的方法。2、拒绝使用else这个可以避免if...else条件的深层嵌套,让代码更加清晰。3、封装所有的原生类型和字符串将原生的类型封装称为有意义的类型,比如表示几点的int类型值,可以封装成Hour,这样更加清晰,提高代码的可维...原创 2010-05-31 21:43:20 · 267 阅读 · 0 评论 -
多态知多少
今天看书,看到了这一句:The ability to implement polymorphism through functional overloading is not supported by PHP and probably never will be.作为从c++开始学习面向对象的程序员,第一反应就是这个是不是说错了,通过函数重载来实现多态?我当时也大大的sb了一把,以为是印错了,...2009-07-11 19:18:45 · 80 阅读 · 0 评论 -
如何写出漂亮的代码
一、不要使用魔法数字,尽量定义枚举、常量、宏:我常常见到表示各种状态的数字,0,1,2....,我真的不知道这表示什么含义,如果你在不在文档中说明的话,这个东东过几天连你自己都不知道个一二三了。二、命名要具有描述力,尽量使用全名而不是自创的缩写,除非地球人都这么用这个缩写:我常常看到一些自创的缩写,这个缩写或许只有你自己知道,类名,方法名,参数名尤其要有好的描述里,局部变量...2009-07-04 01:02:46 · 735 阅读 · 0 评论 -
Visitor模式及其实现方式优劣比较
Visitor模式的使用情景以及与Iterator的比较见我以前的一篇文章[url]http://fuliang.iteye.com/blog/166142[/url]这次主要讨论Visitor的两种实现方式及其优劣。主要实现方式主要有两种:方法一、节点类的accept方法负责遍历逻辑,visitor只负责访问的操作。方法二、节点类负责调用visit自己,而visitor除了负...2009-05-24 00:39:53 · 390 阅读 · 0 评论 -
你能用Wapper来做什么?
从简单的说起:一、在只有值传递的语言中,通过Wapper把实参Wapper之后,实现副作用:在工具箱里写上我们要用的Wrapper:public class Wrapper<T extends Object> { public T object; public Wrapper() { object = null; }; public Wrapper(T object...2008-09-23 18:39:19 · 380 阅读 · 0 评论 -
比较Template method、Strategy和Builder模式随想
Template method和Strategy模式经常在框架设计中被使用,并且二者很相似,都是父类定义功能接口,将具体的实现留个子类,有时二者可以相互替换。Template method主要是父类将一个功能的实现分成几个小的步骤,并且在模版方法中规定了这些步骤的执行顺序,同时定义了这些子步骤的protected类型的方法留给子类实现,声明为protected主要是以防止用户不恰当的使用这些方...2007-04-18 14:02:44 · 163 阅读 · 0 评论 -
也谈谈Spring中的Template和Callback模式
前几天在论坛看到谈论Spring中的Callback模式和Template模式,我以前也提到过Spring中JdbcTemplate中使用的Callback , 自己回来想了想,总结一下自己的想法。Spring中的Callback模式与Template模式合用,随处可见。Template method被广泛的使用,像Servlet就是使用这个模式。Template mothod模式虽然能简化很...2007-04-18 10:59:15 · 197 阅读 · 0 评论 -
从GOF的设计模式说起
设计模式对于做软件者来说是必修的内功之一,尤其现在面向对象已经成为主流的开发方法。掌握那些经过证实的面向对象的设计模式是学习和理解面向对象的绝佳途径,每一个模式都是面向对象最经典的应用。以前算法+数据结构=程序的时代已经一去不复返了,软件的复杂度越来越大,硬件水平的不断提到,也使得在一般的应用中性能的已不是主要的问题,算法在普通的应用中显得不像以前那么重要。而如何降低软件的复杂度,...2007-04-10 10:27:53 · 81 阅读 · 0 评论 -
面向对象的原则、模式、语言及框架(五)
[b]Liskov替换原则[/b]我们前面说了开闭原则OCP,其背后的主要机制是抽象和多态,但在静态语言中(如c++,java),支持抽象和多态的关键机制之一便是继承,正是有了继承,我们才能够抽象出接口/基类,然后在子类中实现继承而来的抽象方法,或覆写基类已实现的方法来定制子类。这样我们才能只通过扩展来实现新增的功能。但是按照什么规则,我们才能设计出最佳的继承层次呢,以及什么样才是...2008-03-10 20:47:44 · 136 阅读 · 0 评论 -
面向对象的原则、模式、语言及框架(四)
[b]开-闭原则:[/b]任何软件在其生命周期内都会发生变化,如果我们期望开发出来的系统不会在第一版之后就被抛弃,就必须面对需求的变化而保持相对稳定.开-闭原则(The open-close principle)为我们提供了指引.那什么是开-闭原则呢?软件实体(模块,类,方法等)应该是可以扩展的,但是不可修改的.这句话说出了软件实体应该具备的两个特征:1、对扩展式开放的(Ope...2008-03-09 17:17:32 · 116 阅读 · 0 评论 -
面向对象的原则、模式、语言及框架(三)
[b]单一职责原则 [/b]这个原则描述了内聚性:一个模块组成元素的功能相关性。单一职责原则描述了引起类变化的原则只有一个,而职责就是变化的原因,如果你能够想到多于一个动机去改变类,那么这个类就具有多于一个职责。例如[code]class Rectangle{ public void draw(); public double area();}[/code]...2008-03-08 18:45:22 · 122 阅读 · 0 评论 -
面向对象的原则、模式、语言及框架(二)
[b]一、一些拙劣的设计症结[/b]说起面向对象的原则,不得不提一些拙劣的一些设计症结,和代码的Bad Smell类似,但他们处于更高的层次,是整个软件结构的Bad Smell.这些症结主要有:[b]僵化性(Rigdity):[/b]设计难于改变。很难对系统进行改动,因为每个改动会迫使许多对系统的其他部分做改动,这往往是系统耦合性太高.[b]脆弱性(Fragility):[/b...2008-03-08 17:18:44 · 105 阅读 · 0 评论 -
面向对象的原则、模式、语言及框架(一)
这学期开面向对象的方法课程,可以趁机总结一下以前面向对象的开发经验,以及课程的心得,打算从面向对象的原则、模式、语言及框架方面总结,貌似是一个很大的题目。今天听了面向对象的课,主要是讲软件复用与组件技术,以及面向对象建模技术。今天讲了COM组件,微软帝国大厦的基石。COM组件虽然已是昨日黄花,但对于组件和组件复用的理念还是有很好的诠释的,用C++编COM组件从老师讲的例子来看,貌似很费劲的东东...2008-03-04 19:21:50 · 109 阅读 · 0 评论 -
基于接口编程VS基于实现编程
fhjxp同学在看完我的Struts2.0+Spring+Hibernate的在线音乐系统的代码时:fhjxp 写道[quote]看了一下源码,问一下,dao,service定义每个都定一个接口有什么用啊?有什么好处?[/quote]基于接口而不是类编程,这样Service层依赖于dao层的接口而不是实现,可以方便的替换dao的实现。基于接口 编程提供了可插拔的松耦合的编程方式...2008-02-29 16:38:57 · 249 阅读 · 0 评论 -
不要向上层暴露本层以及所依赖的接口细节
h1.背景在攻略全文搜索中,搜索的接口很丰富,并且将来可能会增加更多的需求。搜索业务类提供的接口既要能满足将来的扩展,又不能暴露底层的细节,还要避免功能组合带来接口的膨胀。h1.设计方法搜索接口的依赖关系,如下图:前端控制器 ----> 搜索业务方法 --> QP搜索APIQP主要需要一下参数控制搜索条件:普通的: key=key指定字段搜索: sear...原创 2012-02-02 16:50:49 · 225 阅读 · 0 评论