设计模式心得体会

7月初的一个周末,准确的说应该是7月1号周六,在网上看到一本《大话设计模式》的书,而且看到很多很好的评论,于是乎,下载了电子书看看,一下子看了几章之后,对设计模式有了个了解,于是继续上网搜些其他资料,进一步了解设计模式。。。最终结论:设计模式是个好东西,具体怎么好,一两句话是无法概括的,也是从那天起,我就决定学习设计模式,于是就看《大话设计模式》,至七月十多号,大概看了一百多页后,感觉有点难,有点看不下去的感觉,于是上网找其他的好方法,无意间发现了李建忠老师的《c#设计模式纵横谈》系列讲座,微软的web cast课程,主要讲解gof的23个设计模式,每个一讲,加上一头一尾,共25讲,试听了一节课后,感觉很有用,于是就抽时间去边听课边看书,并在我的博客里写下笔记,依赖加深印象,二来可以督促我的进度。。。
三个月以来,总算把设计模式学完一遍了,原计划是两个月学完(一星期三个模式),由于。。。计划两个月学完实际花了三个月,感触多多,收获多多——对c#语言有了更进一步的认识,对oo的思想有了更全面的了解。。。
下一步在设计模式方面的计划:巩固并运用设计模式,巩固:把《大话设计模式》,《设计模式》,《设计模式——可复用的面向对象基础》,《敏捷软件开发:原则、模式与实践》这些书再结合起来系统的看一看,当然还会去买一些我手头上没有的关于设计模式的书;运用:部门前几天也提倡用c#来改版vb程序,我想这是一个很好的平台,正好有机会把理论的东西在实际中应用,理论加实际——唯一的学习方法。。。
下面对各个模式再简单总结一下:

1、创建型模式:
singleton:解决的是实例化对象的个数的问题,比如抽象工厂中的工厂、对象池等,除了singleton之外,其他创建型模式解决的都是 new 所带来的耦合关系。
abstract factory:创建一系列相互依赖对象,并能在运行时改变系列。
factory method:创建单个对象,在abstract factory有使用到。
prototype:通过拷贝原型来创建新的对象。
factory method,abstract factory, builder都需要一个额外的工厂类来负责实例化“一边对象”,而prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。
如果遇到“易变类”,起初的设计通常从factory method开始,当遇到更多的复杂变化时,再考虑重构为其他三种工厂模式(factory method,abstract factory, builder)。

2、结构性模式
adapter:注重转换接口,将不吻合的接口适配对象,用于旧代码复用、类库迁移等。
bridge:注重实现抽象和实现的分离,支持对象多维度的变化。
composite:注重同意接口,将“一对多”的关系转化为“一对一”的关系,屏蔽对象容器内部实现结构,实现对象和对象容器使用的一致性。
decorator:注重稳定接口,在此前提下为对象扩展功能,实现对象功能的扩展,避免子类膨胀。
facade:注重简化接口,屏蔽各子系统的复杂性,提供更高层接口供客户访问。
flyweight:注重保留接口,在内部使用共享技术对对象存储进行优化(通过共享大量细粒度对象,提供系统性能)。

proxy:注重假借接口,通过增加间接代理,实现更多控制,屏蔽复杂性。

3 、行为型模式
template method:封装算法结构,定义算法骨架,支持算法子步骤变化。
strategy:注重封装算法,支持算法的变化,通过封装一系列算法,从而可以随时独立于客户替换算法。
state:注重封装与状态相关的行为,支持状态的变化,通过封装对象状态,从而在其内部状态改变时改变它的行为。
memento:注重封装对象状态变化,支持状态保存、恢复。
mediator:注重封装对象间的交互,通过封装一系列对象之间的复杂交互,使他们不需要显式相互引用,实现解耦。
chain of responsibility:注重封装对象责任,支持责任的变化,通过动态构建职责链,实现事务处理。
command:注重将请求封装为对象,支持请求的变化,通过将一组行为抽象为对象,实现行为请求者和行为实现者之间的解耦。
iterator:注重封装特定领域变化,支持集合的变化,屏蔽集合对象内部复杂结构,提供客户程序对它的透明遍历。
interpreter:注重封装特定领域变化,支持领域问题的频繁变化,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
observer:注重封装对象通知,支持通信对象的变化,实现对象状态改变,通知依赖它的对象并更新。
visitor:注重封装对象操作变化,支持在运行时为类结构添加新的操作,在类层次结构中,在不改变各类的前提下定义作用于这些类实例的新的操作。

正确对待模式:
设计模式建立在对系统变化点的基础上进行,哪里有变化,哪里就应用设计模式。
设计模式应该以演化的方式来获得,系统的变化点往往是经过不断演化才能准确定位。
不能为了模式而模式,设计模式是一种软件设计的软力量,而非规范标准,不应夸大设计模式的作用。

设计模式心得体会(2):

从一开始学习设计模式至今已半年有余了,第一次接触设计模式是一次不经意间在网上看到《大话设计模式》一书,看了前言了第一章后,就感觉到其诱惑力对于一个程序员来说,是无比巨大的。大概是去年十月份的时候,部门决定成立读书会,系统学习设计模式。

通过学习设计模式,除了学习到“一些设计模式”,还让我进一步熟悉、巩固了面向对象思想,进一步熟悉了c#语言。。。我曾多次设想,我们如果引入面向对象思想,并结合设计模式来重写或改善我们的系统(必须重写,虽说设计模式只是一种思想,语言只是实现而已,但是选择一门好的语言,无疑也是非常重要的,而vb6在面向对象方面却有很大欠缺甚至不具备其条件),那么我们的系统将会像目前一样需要那么多人来维护吗?

《大话设计模式》一书其实是对gof的《设计模式——可复用面向对象软件的基础》一书的“翻译”,让人更容易理解,用通俗易懂的语言阐述软件设计过程中的一些“模式”,在某种特定环境下,用最好的设计方法(代码高内聚,低耦合,使其有良好的可扩展性和可维护性)达到我们的目的,或许其方法有很多很多,但是寻找到最好的方法却不是件容易的事,设计模式是对前人的设计经验的一个总结,告诉我们在某种特定的环境下,这样的设计师最好的,学习设计模式有助于我们在设计软件的过程中少走很多弯路。

我对gof的23个设计模式虽然都有看过,但是只有理解,实现,应用及思考之后,才能真正体会其精妙之处,至今体会较深的有以下几个模式:1. strategy——封装系列“算法”,让它们之间可以相互替换,“算法”并不是单指数据结构中的算法,在实践中,它几乎可以封装任何类型的规则,这使得策略模式的运用极其广泛;2. template method——有人说是用的做多的模式,只要有抽象类的地方,都可以看到这个模式,它通过把不变行为移到父类中去,去除子类中的重复代码,从而提供了一个很好的代码复用平台;3. facade——提供了对基础架构的统一访问,减少复杂性,在web编程者中的三层架构,就是此思想,每一层都封装好一部分功能,提供给上一层统一的方法调用,整个framework体系就是facade模式的封装,随着1.0升级到3.5,越来越多复杂的高级功能被封装,可以说facade无处不在;4. abstract factory——提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,咋一看,太抽象了,说个例子,在三层架构中,bll层对dal层的调用会直接用到dal层中的类,如果dal层是分别对sql server,oracle的访问,bll层需要根据实际情况决定实例化哪一个dal层中的类,我们又希望在两种dal层切换时,bll层和ui层都不做改变,那么可在bll层和dal层中增加接口层(体现了“抽象”的精神,或者说是“面向接口编程”的最佳体现)和抽象工厂(dalfactroy),让它来实例化dal层中的实例;5. singleton——确保一个类仅有一个实例,并提供一个访问它的全局访问点,如单件窗体,点一下menu,弹出一个窗体(实例),在关闭这个新窗体之前,再次点击该menu,不会再次出现同样的弹出窗体(实例)。。。篇幅有限,其他模式或多或少都有点感觉。

最后,引用《设计模式解析》书中的一句话:设计模式体现的是一种思想,而思想是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想融入到了你的思想中后,你就会不自觉地使用这种思想去进行你的设计和开发,这一切才是最重要的。

7月初的一个周末,准确的说应该是7月1号周六,在网上看到一本《大话设计模式》的书,而且看到很多很好的评论,于是乎,下载了电子书看看,一下子看了几章之后,对设计模式有了个了解,于是继续上网搜些其他资料,进一步了解设计模式。。。最终结论:设计模式是个好东西,具体怎么好,一两句话是无法概括的,也是从那天起,我就决定学习设计模式,于是就看《大话设计模式》,至七月十多号,大概看了一百多页后,感觉有点难,有点看不下去的感觉,于是上网找其他的好方法,无意间发现了李建忠老师的《c#设计模式纵横谈》系列讲座,微软的web cast课程,主要讲解gof的23个设计模式,每个一讲,加上一头一尾,共25讲,试听了一节课后,感觉很有用,于是就抽时间去边听课边看书,并在我的博客里写下笔记,依赖加深印象,二来可以督促我的进度。。。
三个月以来,总算把设计模式学完一遍了,原计划是两个月学完(一星期三个模式),由于。。。计划两个月学完实际花了三个月,感触多多,收获多多——对c#语言有了更进一步的认识,对oo的思想有了更全面的了解。。。
下一步在设计模式方面的计划:巩固并运用设计模式,巩固:把《大话设计模式》,《设计模式》,《设计模式——可复用的面向对象基础》,《敏捷软件开发:原则、模式与实践》这些书再结合起来系统的看一看,当然还会去买一些我手头上没有的关于设计模式的书;运用:部门前几天也提倡用c#来改版vb程序,我想这是一个很好的平台,正好有机会把理论的东西在实际中应用,理论加实际——唯一的学习方法。。。
下面对各个模式再简单总结一下:

1、创建型模式:
singleton:解决的是实例化对象的个数的问题,比如抽象工厂中的工厂、对象池等,除了singleton之外,其他创建型模式解决的都是 new 所带来的耦合关系。
abstract factory:创建一系列相互依赖对象,并能在运行时改变系列。
factory method:创建单个对象,在abstract factory有使用到。
prototype:通过拷贝原型来创建新的对象。
factory method,abstract factory, builder都需要一个额外的工厂类来负责实例化“一边对象”,而prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。
如果遇到“易变类”,起初的设计通常从factory method开始,当遇到更多的复杂变化时,再考虑重构为其他三种工厂模式(factory method,abstract factory, builder)。

2、结构性模式
adapter:注重转换接口,将不吻合的接口适配对象,用于旧代码复用、类库迁移等。
bridge:注重实现抽象和实现的分离,支持对象多维度的变化。
composite:注重同意接口,将“一对多”的关系转化为“一对一”的关系,屏蔽对象容器内部实现结构,实现对象和对象容器使用的一致性。
decorator:注重稳定接口,在此前提下为对象扩展功能,实现对象功能的扩展,避免子类膨胀。
facade:注重简化接口,屏蔽各子系统的复杂性,提供更高层接口供客户访问。
flyweight:注重保留接口,在内部使用共享技术对对象存储进行优化(通过共享大量细粒度对象,提供系统性能)。

proxy:注重假借接口,通过增加间接代理,实现更多控制,屏蔽复杂性。

3 、行为型模式
template method:封装算法结构,定义算法骨架,支持算法子步骤变化。
strategy:注重封装算法,支持算法的变化,通过封装一系列算法,从而可以随时独立于客户替换算法。
state:注重封装与状态相关的行为,支持状态的变化,通过封装对象状态,从而在其内部状态改变时改变它的行为。
memento:注重封装对象状态变化,支持状态保存、恢复。
mediator:注重封装对象间的交互,通过封装一系列对象之间的复杂交互,使他们不需要显式相互引用,实现解耦。
chain of responsibility:注重封装对象责任,支持责任的变化,通过动态构建职责链,实现事务处理。
command:注重将请求封装为对象,支持请求的变化,通过将一组行为抽象为对象,实现行为请求者和行为实现者之间的解耦。
iterator:注重封装特定领域变化,支持集合的变化,屏蔽集合对象内部复杂结构,提供客户程序对它的透明遍历。
interpreter:注重封装特定领域变化,支持领域问题的频繁变化,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
observer:注重封装对象通知,支持通信对象的变化,实现对象状态改变,通知依赖它的对象并更新。
visitor:注重封装对象操作变化,支持在运行时为类结构添加新的操作,在类层次结构中,在不改变各类的前提下定义作用于这些类实例的新的操作。

正确对待模式:
设计模式建立在对系统变化点的基础上进行,哪里有变化,哪里就应用设计模式。
设计模式应该以演化的方式来获得,系统的变化点往往是经过不断演化才能准确定位。
不能为了模式而模式,设计模式是一种软件设计的软力量,而非规范标准,不应夸大设计模式的作用。

设计模式心得体会(2):

从一开始学习设计模式至今已半年有余了,第一次接触设计模式是一次不经意间在网上看到《大话设计模式》一书,看了前言了第一章后,就感觉到其诱惑力对于一个程序员来说,是无比巨大的。大概是去年十月份的时候,部门决定成立读书会,系统学习设计模式。

通过学习设计模式,除了学习到“一些设计模式”,还让我进一步熟悉、巩固了面向对象思想,进一步熟悉了c#语言。。。我曾多次设想,我们如果引入面向对象思想,并结合设计模式来重写或改善我们的系统(必须重写,虽说设计模式只是一种思想,语言只是实现而已,但是选择一门好的语言,无疑也是非常重要的,而vb6在面向对象方面却有很大欠缺甚至不具备其条件),那么我们的系统将会像目前一样需要那么多人来维护吗?

《大话设计模式》一书其实是对gof的《设计模式——可复用面向对象软件的基础》一书的“翻译”,让人更容易理解,用通俗易懂的语言阐述软件设计过程中的一些“模式”,在某种特定环境下,用最好的设计方法(代码高内聚,低耦合,使其有良好的可扩展性和可维护性)达到我们的目的,或许其方法有很多很多,但是寻找到最好的方法却不是件容易的事,设计模式是对前人的设计经验的一个总结,告诉我们在某种特定的环境下,这样的设计师最好的,学习设计模式有助于我们在设计软件的过程中少走很多弯路。

我对gof的23个设计模式虽然都有看过,但是只有理解,实现,应用及思考之后,才能真正体会其精妙之处,至今体会较深的有以下几个模式:1. strategy——封装系列“算法”,让它们之间可以相互替换,“算法”并不是单指数据结构中的算法,在实践中,它几乎可以封装任何类型的规则,这使得策略模式的运用极其广泛;2. template method——有人说是用的做多的模式,只要有抽象类的地方,都可以看到这个模式,它通过把不变行为移到父类中去,去除子类中的重复代码,从而提供了一个很好的代码复用平台;3. facade——提供了对基础架构的统一访问,减少复杂性,在web编程者中的三层架构,就是此思想,每一层都封装好一部分功能,提供给上一层统一的方法调用,整个framework体系就是facade模式的封装,随着1.0升级到3.5,越来越多复杂的高级功能被封装,可以说facade无处不在;4. abstract factory——提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,咋一看,太抽象了,说个例子,在三层架构中,bll层对dal层的调用会直接用到dal层中的类,如果dal层是分别对sql server,oracle的访问,bll层需要根据实际情况决定实例化哪一个dal层中的类,我们又希望在两种dal层切换时,bll层和ui层都不做改变,那么可在bll层和dal层中增加接口层(体现了“抽象”的精神,或者说是“面向接口编程”的最佳体现)和抽象工厂(dalfactroy),让它来实例化dal层中的实例;5. singleton——确保一个类仅有一个实例,并提供一个访问它的全局访问点,如单件窗体,点一下menu,弹出一个窗体(实例),在关闭这个新窗体之前,再次点击该menu,不会再次出现同样的弹出窗体(实例)。。。篇幅有限,其他模式或多或少都有点感觉。

最后,引用《设计模式解析》书中的一句话:设计模式体现的是一种思想,而思想是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想融入到了你的思想中后,你就会不自觉地使用这种思想去进行你的设计和开发,这一切才是最重要的。


    相关文章

    室内设计心得体会

    室内设计心得体会 当初要参加培训学习的时候有过这样的问题,我简单谈下我的学习经历和一些心得体会,希望对你有所帮助。我是去年9月份在贝纳学习的,果然室内设计的老师也很有水平,和我们原先在学校里学的多媒体设计教的不一样,贝纳这个班针对设计的例子 ...

    高职教育发展的心得体会

    对于高职教育发展学习的心得体会 --以设计类专业为例 高职教育之于今日已经发展到比较成熟的阶段,但是很多教育内容及教育体制并没有紧跟时代的潮流,或者说可能还需要推敲,还需要融入社会,让高职教育在教育体制中起到更加稳固的作用. 下面我结合设计 ...

    毕业设计心得体会

    毕业设计心得体会 随着毕业日子的到来,毕业设计也接近了尾声。经过几周的奋战我的毕业设计终于完成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识 ...

    经验交流:关于软件设计的一点心得体会_软件工程_软件工程_软件开发_天新网

    经验交流:关于软件设计的一点心得体会 http://dev.21tx.com 2007年06月28日 论坛整理 博客园 - 曾经看过一本书叫<道法自然>,内容略记得一二,但我最欣赏的是它的书名.软件设计没什么太神秘有东西,只要用 ...

    毕业设计心得体会与收获

    毕业设计心得体会与收获(一) 随着毕业日子的到来,毕业设计也接近了尾声.经过几周的奋战我的毕业设计终于完成了.在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面.毕业设计不仅是对 ...

    平面设计实习心得体会

    篇一:平面设计实践心得 个人专业实践心得 一.实践期间: 2013年7月7日----2013年7月22日 二.实践单位: xxxxxx工业有限公司,其创立于2000 年.坐落于xxxxx工业园.公司致力于高山蔬菜深加工,形成"公司 ...

    2016单片机课程设计心得体会

    2016单片机课程设计心得体会 单片机课程设计心得体会,课程设计是大学课堂中常见的课堂模式,该模式更好的培养学生的综合能力,课程模式主要由选题到定稿,从理论到实践组成,以下由第一公文网整理关于单片机课程设计的心得. 单片机课程设计心得体会 ...

    反思版)凝练.形象的特点

    经典名文的语言魅力 <以〈陋室铭〉和〈爱莲说〉为例--体会凝练.形象的语言>的教学设计 水头一中 吕小卫 [设计理念] 中国文化丰厚博大,经典名篇的语言魅力经久不衰,引导学生体会古典名篇语言凝练.形象的特点对学生的语言积累.语感 ...

    网页课程设计心得体会

    不知不觉,二个星期的<网页设计与网站建设>课程的实操即将过去,回顾这一段日子,真的令我体会很深,也学会很多东西,懂得很多以前不懂的东西,也明白了一些事情. 自从第一天接触<网页设计与网站建设>课程,我以下定决心要把网 ...