设计模式15问

  •  
  • 设计模式是什么?

›  优秀的设计范例

›  从优秀设计方案中发现和总结出来的经验

›  在实践中反复出现的设计问题的优秀解决方案

›  设计和开发人员相互交流的基本术语

  • 设计模式不是什么?

›  面向对象设计的框架

›  可供简单组合的积木式的设计元件

›  新发明的创新思路和方法

›  解决面向对象设计问题的完整方案

  • 我想学习设计模式,需要具备什么基础呢?

›  一门面向对象的编程语言

›  一些面向对象的基本概念

›  一些基础的UML类图知识

  • 那么多模式,我连名字都记不住,怎么学?

›  模式命名的目的是交流

›  记不住名称并不影响对模式的学习,只是你在给别人讲你的设计思路时要多啰嗦几句而已

  • 模式又按目的分类,又按范围分类,我搞不清楚,而且我认为有的模式在哪个类别中都有一定道理,到底要怎样看待模式的分类呢?

›  分类不重要

›  已有的分类只是便于了解模式间的关系

  • 模式的类图是一样的,为何却是两种模式呢?

›  类图只是解决方案的表现形式

›  模式的目的是解决某一特定的问题

›  模式是根据其意图命名,而不是解决方案的类图

  • 这么多种模式,它们有什么共性吗?

›  模式的共性就是设计原则,模式是在设计原则的指导下将长期实践的经验整理下来形成的。

›  设计原则是设计模式之魂

›  这些原则主要包括:单一职责原则SRP、开发关闭原则OCP、依赖倒置原则DIP、接口隔离原则ISP、里氏替换原则LSP、合成利用原则CARP

  • 我看到在实际代码中的实现往往与书中的类图不太相同,这是正确的使用模式吗?

›  实际的实现当中往往考虑了具体的逻辑环境而进行了微调,这个是合适的,也是提倡的

›  模式是为了解决问题,而不是让我们按它的类图来实现代码

  • 我看到别人的代码既像这个模式又像那个模式,有时甚至是混在一起,这是怎么回事呢?

›  实际设计中,设计人员往往会进行设计折衷,模式的使用也往往会组合起来,或者进行一些简化。

›  要的不是模式本身,而是用模式解决实际问题。

  • 我负责的代码有限,没有机会做全局性的设计工作,我要怎样学习和使用设计模式呢?

›  勤于思考,加强理解

›  在小范围代码中有意识的选择模式使用

›  向有经验的同学请教用法是否合适

›  循序渐进

  • 总体上说,感觉学习设计模式是一个长期的过程,我怎么知道自己学到什么程度了呢?

›  可以将学习过程分为三个阶段

›  阶段一学习一个模式并套用

›  阶段二发现模式的不适用性并调整

›  阶段三着眼于实际问题的解决,顺其自然的使用模式

  • 设计模式有负面的作用吗?

›  可以肯定的回答“有”

›  会引入更多的抽象层次

›  会引入更多功能简单的小类

›  会让人走火入魔

›  ……

  • 我在选择设计模式时要思考哪些问题?

›  考虑设计模式是如何解决问题的

›  浏览模式的意图部分

›  研究目的相似的模式

›  考虑你的设计哪些是可变的

›  明确模式的负面效应

  • 我要怎样使用设计模式?

›  弄清模式的意图并特别注意其适用性部分和效果部分,确定它适合你的问题

›  弄清结构、参与者和协作部分

›  看代码示例

›  选择在应用上下文中有意义的模式参与者的名字。模式中的名字通常过于抽象而不会直接出现在应用中。

›  定义类及接口,建立它们的关系,定义代表数据和对象引用的实例变量。

›  实现执行模式中责任和协作的操作,代码示例部分的例子可以提供帮助和指导。

›  注:这些只对一开始使用模式起指导作用。以后会形成自己的使用方法。

  • 使用时还有什么建议吗?

›  保持简单(如果没用模式解决某个问题,就不是经验丰富的开发人员?)

›  模式不能解决所有问题

›  要知道何时需要模式(不仅是使用的时机,还有放弃的时机)

›  重构是最好的使用模式的时机(重构就是为了改善结构,而不是改变行为)

›  敢于放弃模式(放弃往往比拿起更难)

›  如果现在不需要,就不要使用(抗拒诱惑,降低复杂度)

›  设计模式不等同于软件架构,但设计模式可以在架构进入更详细的设计阶段时发挥作用

 

 ——欢迎转载,请注明出处 http://blog.csdn.net/caowenbin ——

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文斌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值