为什么要学习设计模式(Design Patterns) - 软件设计大师之路

以下比喻摘自Douglas Schmidt, bugn翻译.

知识的模式(Patterns of Learning)

在人类努力解决的许多领域的成功方案都来源于各种模式(Patterns).

事实上, 教育的一个重要目标就是把知识的模式一代一代传下去.

下面我们首先看一下学习下棋是怎样用到模式(patterns).
学习开发一个好的程序类似于学习怎样下好棋.

成为一个象棋大师
* 首先学习规则和必要条件
  例如, 棋子的名称, 合法的棋子移动, 棋盘的几何形状和方向等
* 然后学习原理
  例如某一种棋子的相对价值, 中心格的战略价值, 威胁的强度等
* 然而要成为象棋大师, 你必须要学习其他大师下过的棋局
  这些棋局就包含有模式(patterns),这些模式(patterns)必须被理解,记忆和重复的运用
* 有很多种这样的模式(patterns)

成为一个软件设计大师
* 首先学习规则
  例如算法, 数据结构和软件语言
* 然后学习原理
  例如结构化编程, 模块化编程, 面向对象编程, 泛编程(general programming)等
* 但是要真正的精通软件设计, 你必须学习其他大师级的设计
  这些设计包含的模式(patterns)必须被理解,记忆和重复的运用
* 有很多种这样的模式(patterns)

翻译水平有限,以下附上原文:

Patterns of Learning

Successful solutions to many areas of human endeavor are deeply rooted in patterns
In fact, an important goal of education is transmitting patterns of learning
from generation to generation
  Below, we'll explore how patterns are used to learn chess
  Learning to develop good software is similar to learning to play good chess

Becoming a Chess Master

1) First learn rules and physical requirements
  e.g., names of pieces, legal movements, chess board geometry and orientation, etc. 2) Then learn principles
  e.g., relative value of certain pieces, strategic value of center squares, power of a threat, etc.
3) However, to become a master of chess, one must study the games of other masters
  These games contain patterns that must be understood, memorized, and applied repeatedly
4) There are hundreds of these patterns

Becoming a Software Design Master

First learn the rules
e.g., the algorithms, data structures and languages of software

Then learn the principles
e.g., structured programming, modular programming, object oriented programming, generic programming, etc.

However, to truly master software design,one must study the designs of other masters
These designs contain patterns must be understood, memorized, and applied repeatedly

There are hundreds of these patterns

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重性 建筑和软件中模式异同 A. 创建模式 设计模式 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. 设计模式 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这两 种情况分开进行。 设计模式 Prototype(原型) 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 B. 结构模式 设计模式 Adapter(适配器) 使用类再生的两个方式:组合(new)和继承(extends),这个已经在 thinking in java中提到过. 设计模式 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于 和单位做买卖。文章中还对 Jive再进行了剖析。 设计模式 Decorator(装饰器) Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色. 设计模式 Bridge(桥连) 将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们间搭建一个桥(动态的结合) 设计模式 Flyweight(共享元) 提供 Java运行性能,降低小而大量重复的类的开销. C. 行为模式 设计模式 Command(命令) 什么是将行为封装,Command 是最好的说明. 设计模式 Observer(观察者) 介绍如何使用 Java API 提供的现成 Observer 设计模式 Iterator(迭代器) 这个模式已经被整合入Java的Collection.在大多数场合下无需自己制造一个Iterator,只将对象装入Collection中, 直接使用 Iterator 进行对象遍历。 设计模式 Template(模板方法) 实际上向你介绍了为什么使用 Java 抽象类,该模式原理简单,使用很普遍. 设计模式 Strategy(策略) 不同算法各自封装,用户端可随意挑选需的算法. 设计模式 Chain of Responsibility(责任链) 各司其职的类串成一串,好象击鼓传花,当然如果自己能完成,就不推委给下一个. 设计模式 Mediator(中介) Mediator 很象十字口的红绿灯,每个车辆只需和红绿灯交互就可以. 设计模式 State(状态) 状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换. 设计模式 Memento(注释状态?) 很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式 Interpreter(解释器)用来对语言的分析,应用机会不多. 设计模式 Visitor(访问者) 访问者在进行访问时,完成一系列实质性操作,而且还可以扩展. 设计模式引言 设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关的对象,以适当的粒度将它们归 类,再定义类的接口和继承层次,建立对象间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求 也有足够的通用性。 你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,一下子就得到复用性和灵活性好的设计, 即使不是不可能的至少也是非常困难的。一个设计在最终完成前常被复用好几次,而且每一次都有所修改。 有经验的面向对象设计者的确能做出良好的设计,而新手则面对众多选择无从下手,总是求助于以前使用过的非面向对象 技术。新手需花费较长时间领会良好的面向对象设计是怎么回事。有经验的设计者显然知道一些新手所不知道的东西,这又 是什么呢? 内行的设计者知道:不是解决任何问题都从头做起。他们更愿意复用以前使用过的解决方案。当找到一个好的解决方案,他 们会一遍又一遍地使用。这些经验是他们成为内行的部分原因。因此,你会在许多面向对象系统中看到类和相互通信的对象( c o m
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值