设计模式15问

  • 设计模式是什么?

优秀的设计范例

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

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

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

  • 设计模式不是什么?

面向对象设计的框架

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

新发明的创新思路和方法

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

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

一门面向对象的编程语言

一些面向对象的基本概念

一些基础的UML类图知识

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

模式命名的目的是交流

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

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

分类不重要

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

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

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

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

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

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

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

设计原则是设计模式之魂

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

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

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

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

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

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

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

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

勤于思考,加强理解

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

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

循序渐进

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

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

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

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

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

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

可以肯定的回答“有”

会引入更多的抽象层次

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

会让人走火入魔

……

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

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

浏览模式的意图部分

研究目的相似的模式

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

明确模式的负面效应

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

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

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

看代码示例

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

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

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

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

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

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

模式不能解决所有问题

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值