请问高手们对于设置模式应从什么情况去考虑

我是一个初学者,近来学习了一些模式,但是在实际应用中总是形似神不是,住住把握不好使用的尺度。请教高手,模式的使用的目的,及判断用法是否正确的标准,其在实际应用中怎么去从高层次去把握好使用方向?
从学习中我对模式有一些初层次的体会。我个人觉得使用模式的思维习惯
只对对象化编程的一种拓展,使用的主要目的是各类的结构及关系的封装。每个模式就是各类不同的关第的解决方案,相当于语句中的if、for.
请高手们指教我的这种观念是否正确
《怎么修改提交的东西啊。》
编程从算法优化的角度来看,就是解决排序跟查找其主要目的是让cpu少执行一些指令,来增加效率;从各种封装的角度来看,就是解决代码的重用及跟现实的概念相符其主要目的就是提高代码的可维护性。将对代码的封装及优化技术移植到对类的封装及优化上去就拥有了模式思维。代码中的点是数据,模式的中点是类。代码中的各种算法是来优化数据处理,模式中的各种模式中就是来优化类的关系。
我的思维还是混乱啊!
>代码中的各种算法是来优化数据处理,模式中的各种模式中就是来优化类的关系。
理解正确。

模式是用来实现关系的松耦合,只有松耦合才能增强可维护性 可拓展性。软件不只是用来实现功能,更重要是如何高质量灵活地实现这些功能。

实现功能是高中生都能自学完成;高质量实现是专业训练才会有,这就是专业和业务的区别。

算法只是属于功能范畴。

软件在上个世纪80年代末就从面向功能时代过渡到面向对象的模式设计时代,而我们每个程序员自己呢?是否在使用现代载体,思想是封建落后的思想呢?

现在做项目时候我觉得面向过程思维驱动还是占一部分的.因为面向过程是最直接的.要想成为高手面向对象思想必不可少的.
面向过程转为面向对象是比较困难,也是对自己的挑战,总得来说从下面两个方面来解决:

1. 不要用数据表来分析系统,而用模型对象来分析系统,进而使用模型对象,围绕数据表编程和面向过程是一对恶魔兄弟,一旦围绕数据表编程,必然带来面向过程的编程风格。所以,一定要斩断它们。


2. 花更多时间重构代码,引入模式,初期不要担心过分设计,只有范了过分设计毛病,才知道什么叫过分设计,别信奉那些经验丰富但是排斥OO,对OO新思想不以为然的观点,自己不经历风雨,怎么见彩虹呢!


面向过程、面向功能是软件刚刚起步的方式,经过20多年发展,软件不再是仅仅完成业务功能工具,而是自身成为一个独立进展体系。

我觉得模式设计是面向对象的思维的拓展,是新的编程思想。就象用类来封装数据与方法,就出现了新的对象化思维。而模式设计是用来封装对象的,处理相互关联的对象的关系的,应视为新的编程思想。就是现在刚兴起的框架化思维.只是现在还不成熟。
呵呵,通过对模式的学习总算突破了自己的一些思想了。从这些明白函数,类,接口封装技术的不同,改变了自己对接口的理解,我现在觉得接口真的不是应看成对象的方法,类的擅长表达概念的层次性,而接口擅长表达概念的多样性实现,也只有真正明白他们之间的不同才能体会到对像化思编程的简易性。更优说过程化思想。
模式化思维,就是让类去管理系统的多样性。用类去描述系统的层次性,用接口描述系统的多样性,该不该应用模式,需应用什么样的模式,一下子变得有道理可言,如果系统没有多样性,大可不必去使用模式,什么情况下要使用接口,也一下子清晰起来.
>如果系统没有多样性,大可不必去使用模式
问题关键在这里,系统多样性是我们没有办法计划的,虽然在现阶段我们认为就是这样,肯定这样,不会有变化了,这种思维是现实的吗?很明显不客观,只要软件一直在用,它反映客观世界怎么不会变化呢?

只有相对的解决方案,没有绝对的解决方案。

所以,不接受模式思维的人从骨子里说都不是真正崇尚科学客观的人。科学客观首先就是承认世界是在变化的,那么作为世界的镜子软件有何种理由不作出多样性的考虑呢?

谢谢你的指引,原来我是没有从变化的解度,及从系统的多样性的角度来考虑。所以对面向对像的思维也只是一知半解。通过对模式的学习真正明白了过程与对像思维的最大差异。过程是面向功能的,对象是面向概念的,同一个概念在现实中有很多实现的办法,所以从系统角度来说是多样性,从功能实现来说,是共同的特征,面向功能可是说是一个求同的过程,而面向对象是一个存异的过程。哎!没法用语言来表达出这其中的领悟。也只是混乱一下大家的思维吧了
>面向功能可是说是一个求同的过程,而面向对象是一个存异的过程
从比喻角度来说,面向功能就象平铺直叙的、只奔主题,没有婉转和想像余地的文章;而面向对象则是加入了很多“假如”想像,是一篇激活人无限想像力、婉转动人的精彩文章。

所以从文章、文化艺术角度来看,很容易区分它们不同。可惜国内理文分明,导致软件被纯理数学“强奸”啊。

据说:现在计算机软件写论文,如果希望发表,文章中必须有一些数据模型,显得自己的高深,其实这是最无力的表现,一个学科是否高深怎么能够借助其他学科来表现呢?很显然,现在国内计算机软件那些权威没有将软件本身作为文章看待,他们更看重的是文章所表现的主题思想,就象我们一直强调文化艺术更重要是教育功效,而不是文化艺术本身。

难道软件不可以和艺术一样,根本没有任何功效,就是探讨如何更好地展现自己?

软件在国内一天被“功用主义”遏制,OO思想一天就得不到舒展,GoF设计模式容易懂,如何使用?如何培养自己真正具备OO素质,我看几乎所有学习软件的人都要重新培训!因为路的方向就走错了。

现在的社会本就是这样子,大家都追求快速实现,商业利益最大化.在利益的驱动下,我们不需要用OO思想来架构系统,只需要利用高手的框框来实现功能就行.等到项目过大的时候出现危机,自己也用不着去苦想,责备一下写框框的人就得了,换个公司又是高手,大家都是混工资的啊.

浮躁是这个社会的现实,你不浮躁反而会被淘汰.呵呵,再过前几年能跟计算机打上交道可都是人杰哦,工资高,混的人也会多点,不然高科技公司那会有那么多波折啊,技术必竞只是商业中的一部分.在大家都只会过程思维的时候,一个人用OO思想,反而会让别人看不懂.

我不是高手,也不是职业程序员,更不是科班学习软件设计出身,只是混过三年的大专.现在觉得自己喜欢的不能放弃,所以又重新花时间来研究学习.

对banq用这个来比喻来比喻软件设计,觉得不是很适合,向面对象化之美就在于更能描写出社中的概念(对象)的逻辑性,直观性,框架性等等,跟面向功能不在一个层次上,跟面向功能支解了概念.而banq的比喻将两都放到了同一层次上.如果说面向功能是一篇文章;那面向对象就是写这编文章的思路,公式.让作者能跟椐自己的需要写出自己的文章,任意发挥.面向对象是面向功能的封装.我觉得对象像是一个词语,而功能就是这个词语的多重含义,在写文章的时候一个是写词语(面向对象),一个是直接写出含义(面向功能).呵呵!不知可行不.

>在写文章的时候一个是写词语(面向对象),一个是直接写出含义(面向功能
这样理解也对,所以比喻是不能用来解释模式的,因为比喻是最容易造成理解歧义的。
呵呵,精妙的道理只能意会,不能言传.能说出来的都只是相似及相近的东西.
看来的我观点可能已经和很多人类似或者一样了:
“尽模式不如无模式”,这句话并不说模式没用,只是我们要清楚,设计模式的目的是什么?我觉得无非是使用程序间的依赖关系降低--也就是客户端类不要太依赖被调用的具体类。这样,我想大多数模式都能达到这个目的。在实际使用中,我们可能不会去想目前我们要使用那个模式,这样多累啊。我们只考虑我怎么把这个依赖降低,然后会考虑多应用接口、抽象类编程。至于用哪个模式已经不是我们关心的了,不是吗?还有其实很多模式用起来会觉得,你在我中、我在你中,模糊、麻烦!还有这也可能带来一点好处是:我们可能在不知不觉中自己 创建了新的模式都不清楚!