最近在学习面向对象设计模式,GOF的23种设计模式大概看了一遍,简单总结一下,设计模式主要分为三种模式,分别是创建模式,结构模式,行为模式。
回过头想一下具体有哪些模式,在什么情况下用什么设计模式,好像还是一头雾水,但是我有几点我却印象深刻,下面就来说说我的感受。
什么是设计模式,我认为设计模式就是前人在程序设计过程中总结出来的经验,他不是凭空创造出来的。
为什么要用设计模式呢?
设计模式的出现就是为了解决软件的变化,因为世界上没有不变的软件,如果有那我想设计模式也就不存在了。刚才说设计模式是应对软件的变化,软件的变化给程序员带来的最大的痛苦是什么呢?我想是软件修改某一处会牵一发而动全身,也就是软件的耦合度过高,设计模式的任务就是降低软件模块之间的耦合度,尽量把模块之间的耦合降到最低。
那么如何降低耦合呢?
我认为关键就是抽象出比较稳定或不变化的部分,将变化比较频繁的部分提取出来进行封装,也就是常说的封装变化点,这是始终贯彻与23中设计模式的始终,我觉得也是设计模式的核心。
掌握了这个核心那么至于使用什么设计模式并不重要了,重要的是如何降低耦合以应对软件的变化。
我不喜欢一上来就考虑用什么设计模式,我倒是喜欢现来实现功能,然后用重构的方法来对程序进行重构,以降低程序之间的耦合,至于重构成什么样子,是否符合哪一种设计模式我并不关心,我所关心的是它能否很好的应对软件的变化。
这让我突然想起了《倚天屠龙记》中张三丰交张无忌太极拳的情节,张三丰先是刷了一套他自创的太极拳,张无忌由于天资聪慧看一遍就记下了所有的招式,可是张无忌在用太极拳和那个高手(忘了叫什么了)过招时,并没有发挥出太极拳的威力,于是张三丰就让张无忌忘掉所有的招式(具体忘掉招数的过程很是搞笑),不要拘泥一招一式,见招拆招,最终张无忌战胜了那个高手,这个情节告诉我们,太极拳其实并不是注重招式的,它的精髓就是一种思想,是以静制动,四两拨千斤的道理。
我想设计模式也类似于太极拳,它是一种思想,一种应对变化的解决思想,他更是一门艺术,更是一种境界,是一种以无招胜有招的境界。
以上就是我对设计模式的一些肤浅的理解,望批评指正!
相关推荐
"鸭子问题"是设计模式中的一个经典例子,通常用来讨论面向对象设计中的多态性和接口概念。 鸭子问题源自于英国计算机科学家贝兹(Gerald J. Sussman)和吉尔伯特·杰克逊(Guy L. Steele Jr.)的一次对话,他们探讨...
行为型模式(如责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式)关注对象之间的交互和职责分配,它们定义了对象之间如何通信和...
教学随笔——怎样提高学生的习作水平.doc
在专家的指导下,张明明学习到如何根据学生的认知水平设计教学活动,激发学生的学习兴趣和主动性,促进每个学生的个性发展和潜能挖掘。这种以学生为本的教学理念,不仅能够提高学生的学习效率,还有助于培养学生的...
面向对象编程是软件开发中的核心概念,而Delphi作为一款强大的RAD(快速应用程序开发)工具,支持基于Object Pascal的语言,提供了丰富的面向对象特性。在本文中,我们将深入探讨Delphi中的类与对象的关系,以及如何...
.NET设计模式系列文章和随笔,如Terrylee的"探索设计模式"系列,提供了对.NET中常见设计模式的详细介绍和案例代码,对初学者和有经验的开发者都有很大的帮助。这类资源可以帮助开发者在.NET平台上更加高效地应用设计...
通过阅读这些随笔,学习者能够逐步理解Delphi中的面向对象编程思想,掌握类的设计、对象的使用、多态的应用以及如何利用Delphi进行更复杂的系统设计。结合实践,这将有助于提升Delphi编程能力,为开发高质量的...
随着建筑业的不断发展,装配式住宅作为一种新型建筑模式,正逐渐改变着传统的建筑设计和建造方式。本文将通过一个实际案例分析,探讨传统住宅与装配式住宅在设计方法上的主要差异。 1. **设计策略的转变** 在传统...
spring + hibernate 事务管理demo工程源码(无jar包) 博文链接:https://momoko8443.iteye.com/blog/190995
再者,林黛玉在高鹗的续作中,从一个有独立思想和丰富内心世界的女子变成了一个不断哭泣的柔弱形象,她的悲剧色彩被简化为一个典型的恋爱悲剧主角。失去了与宝玉的深度对话和共同理念,林黛玉的博学和机智不再显现,...
这篇文档虽然标题为“工作随笔开学第一天——新春茶话会.docx”,但实际上记录的是一次开学典礼中的新春茶话会活动,主要涉及了教育、师生互动和家庭教育等多个方面。以下是对这些知识点的详细说明: 1. **师生互动...
在重渡沟,有两处标志性的自然景观让人印象深刻——飞虹瀑布和泄愤崖。飞虹瀑布的壮观景色,让人心旷神怡,然而在沉醉于自然美景的同时,我们时刻提醒自己要格外注意安全。泄愤崖边,我们静静地聆听那如雷般轰鸣的...
- `std::cout`用于输出数据,`运算符将数据发送到`cout`对象。 - `std::endl`是一个特殊字符,用于换行。 - `std::cin`用于接收用户的输入,同样使用`>>`运算符。 3. **练习解析** - **练习1.1**: 未给出具体...
2. **面向对象编程**:Java的核心特性是面向对象,可能的笔记内容有类、对象、封装、继承、多态等概念,以及如何创建和使用这些概念进行程序设计。 3. **异常处理**:Java中的异常处理机制是编程时必须掌握的部分,...
源码
教师首先引导学生走出教室,观察校园环境,通过交流讨论,学生们发现了小草的枯萎、树叶的凋落、大雁南飞等深秋景象,对“深秋”这个词语有了直观的理解。接着,教师引导学生关注到在寒风中依然盛开的菊花,让学生们...
然而,教育随笔《任性——一种可怕的教育结果》却对过分赏识教育可能带来的负面影响提出了批判性思考,引起了教育界的深思。任性,这个在某些教育观念中可能被忽略或轻视的问题,实质上可能引发一系列严重的社会问题...
【部分内容】部分由于OCR扫描识别错误或漏识别,无法提供有意义的信息。由于没有具体的文本内容,无法直接从文件中提取知识点。 尽管如此,我们可以从文件名出发,尝试对“本色语文”的主张与实践这一主题进行分析...
如果你要把一只猫卖给一个计算机专家,千万不要说它有多聪明多可爱,而要说,这是一只面向对象的猫。这是程序员对程序员的揶揄。面向对象渗透到软件的各个领域,既然找不到银弹,这颗铜子弹成了我们对抗人狼的最佳...