最新评论
张蒙蒙 2011-06-29 14:26
早先我对模式很痴迷,买了不少书看,手上有了锤子,代码都变成钉子了。(呵呵,太菜了就喜欢到处用)
已经很久不在关心模式了,不过以下面向对象原则,还是时刻谨记。
我总结下来给博主。
1.封装变化
2.面向接口编程而非实现
3.优先使用组合而非继承
4.The single Responsibil.单一职责原则
5.对扩展开放对修改关闭原则
6.里氏替换原则
7.依赖倒置原则
8.接口各类原则
9.Law of Demeter 迪米特原则
一切设计模式都是前人用面向对象法则提取出来的最佳实践,这是我对模式的理解。
我支持楼主的重构,我也看了《重构-改善既有代码的设计》,虽然重构实践不多,重构是一件容易让人产生成就感的事情。多重构像欣赏艺术一样欣赏自己的代码。
今天我在qq签名是“ 从完美主义到简单就是美,我走向Keep It Simple,Stupid!”
我已经脱离了对代码的苛刻要求,Kiss原则也许是我思考的新方向。(如果对Kiss原则感兴趣推荐http://blog.csdn.net/lovejianqiao/archive/2006/04/04/650216.aspx)
另外对比市面上的模式书籍,有2本是经典,一本是设计模式解析2,这本书教你模式的由来,每个模式符合哪些原则,根据原则把自己的代码重构到优雅的结构进而推导发现模式,这本书堪称经典。另外一本是Bob大叔的《敏捷软件开发原则、模式与实践》。
黄鹏 2011-06-29 13:24
@richardzeng
请多赐教。谢谢。
抱歉,类似的类库没看过。只是自己瞎猜而已。
Log类的内部逻辑不应该放到Logic中,也绝不能放到那里面。并且需求的增加改变Log内的东西,而是增加Log的组合。无论怎么样,绝不应该修改任何Log类。
这种场景下需求的变化从表面上直接影响到所有的Logic,它们只是运用Log而已,本来这么用,忽然又要变成那么用,而与Log无关。
黄鹏 2011-06-29 13:14
多谢,受教了。我也在想这东西已经有了。仔细想想有点像代理,也像观察者模式,最终我还是觉得更像代理一点(我对它有点陌生了)。
与事件基本一样,稍有不同的是事件往往指单一的事件。比如我注册一个onclick事件,那只有真正click时才触发。如果通过快捷键就不会触发。观察者模式的listerner本身就是多个事件的集合。对于类似Logger的东西,我可以写Warning、Error、Alarm等多个不同的级别。这也可以通过事件实现,无非就是每次多注册几个而已。但是触发源比较多的话工作量就大了。
可以说Logger类的东西不是一个事件,而是相关若干个事件的封装。
现在系统中事件的单播改成组播怎么改?.NET有Event、Delegate对象帮你做了,比较方便。我的意思针对的是没有这些基础库的情况下。比如C++、C等语言。
张蒙蒙 2011-06-29 09:20
@richardzeng
这位同学一说,我想起来了Log4J的日志输出确实采用观察者模式。呵呵不过我还是支持楼主思考问题的。没有思考就每一进步啊
张蒙蒙 2011-06-29 09:14
首先肯定博主的学习和总结的精神。
我仔细的看了楼主对此模式的场景描述,楼主的意图是主调对象调用类似多个被对象灵活管理(删减调用对象)。
那么博主你也许从类似-->推到到集合这个概念,你更加关注了被掉对象的类似性,更加关注存储的集合特性。
我仔细想了下,从本质说,这是一个"直接"观察者模式,楼主因为在前你说了类似观察者模式,我就不解释观察者模式了,博主提出的集合模式是否可以理解成观察者模式的变种,因为这个模式强调的是调用多个,比观察者更加直接,观察者是有触发源,继而通知观察对象,不过从本质说,楼主你的调用对象这个企图也可以理解一个事件触发源---调用对象事件,一旦调用对象,那么所有注册到这个集合上的对象,都被调用了(贴近观察者的被通知)。
观察者模式,一对多也是用集合注册同一接口观察者。
对于观察者模式的变种,在.net里面“事件”Event就是典型的"方法"观察者模式,事件中的多播事件,也是用集合注册多个方法对象。
如果对事件感兴趣,本人毛遂自己一破文http://www.cnblogs.com/LoveBaoBao/archive/2008/12/17/1356769.html
综上,我浅显的见解是,博主这个模式是观察者模式的一个同胞小弟弟,有微小区别。
richardzeng 2011-06-29 08:53
你去看看一些Log库的设计,Log类的内部逻辑是不应该放到业务逻辑类内部。基本上Log库支持不同的输出方式(比如输出到屏幕,文件或者他们的组合等)。
海南.胡勇 2011-06-28 21:27
集合模式基于集合,用于在不改变现有结构的情况下,由访问单一对象升级为可访问一组对象,特别适用于代码重构过程中。它一般与观察者模式结合使用。主要应用于重构过程中将混乱的代码或者用别的不适用的模式写的代码升级为观察者模式之后,解决大量繁索的调用细节,将关联关系由一对一升级为一对多。对于类似事件处理的流程最为适用。
发条橙子 2009-09-08 10:59
C,C++函数调用有共同点也有异同。
C,C++静态调用时用运行时程序维护着。调用也是由运行时程序发起和维护,以及交换控制权。
这是我所知道的。不正之处请指教
Chairo.Penn 2009-03-11 17:28
补充一下,最后一点没有localhost也能解析到127.0.0.1的
有图有真相
http://farm4.static.flickr.com/3398/3345739581_698b64a328.jpg
有图有真相
http://farm4.static.flickr.com/3398/3345739581_698b64a328.jpg

