`

设计模式之《松本行弘的程序世界》的读书笔记

 
阅读更多
<在Evernote写笔记,直接从Evernote中复制出来,格式有所偏差>

《松本行弘的程序世界》http://book.51cto.com/art/201108/284603.htm

设计模式原本是从面向对象的代码中总结出来的,但是现在的编程语言往往在语法级别就封装了一些常用的设计模式支持。
设计模式和具体编程语言无关,但是设计模式在各个具体语言里面的使用方法不尽相同。

面向对象的软件开发中有很多普遍存在的原则(Principle),在设计以及开发面向对象程序的时候,就应该遵循以下抽象原则:
  1. 开放-封闭原则(OCP
  2. 单一职责原则(SRP)
  3. Liskov替换原则(LSP)
  4. 依存关系倒置原则(DIP) 
  5. 接口隔离原则(ISP)
  6. 迪米特法则(LoD)
  7. 合成/聚合复用原则(Composite/Aggregate Reuse Principle . CARP) 

我们的目标是使代码符合上面的这些原则,这是目的。我们如何达到这个目的呢?那就是使用设计模式,这是手段。目的比手段更抽象,也即原则设计模式抽象程度更高。


设计模式可以分成3大类:有关生成的模式(5个),有关构造的模式(7个),有关行为的模式(11个)。


1. Singleton   单例模式 (生成)
     说明:保证某个类的实只有一个
     为什么:系统全体只需要唯一一个这个对象
     如何做:
  1. 使用库的方法实现
  2. 使用类或者模块
  3. 把一般对象作为单例,重写new方法等等手段,这是一般语言常用的方法

      总结:反正不管用什么手段,必须只有一个实例!必须的!


2. Proxy 模式 (构造)
说明:为某个对象提供代理对象。 什么意思?
为什么:
  1. 不想把实现写死,调用程序只和Proxy打交道
  2. 延迟加载具体程序,先加载Proxy
  3. 屏蔽具体实现的复杂性,简化调用接口
如何做:
  1. 自己写代码(库其实是别人写的代码)

3. Iterator 模式 (行为)

说明:提供按顺序访问集合对象中各元素的方法,即使不知道对象的内部构造
          也可以按顺序访问其中的每个元素。
为什么:为什么?
如何做:
  1. 类库只带实现,例如java里面的集合类,都是可迭代的,不过调用代码写起来比较拖沓
  2. 语法自然实现,python里面就自然的实现,例如 for x in XXX.
  3. 你自己写代码实现
总结:这已经是最基本的东西了,几乎都不算是个模式了。在有闭包的语言ruby,内部迭代器。没有闭包java,外部迭代器。

内部迭代器的缺陷:不能同时进行多个循环,也就无法实现按顺序比较2个集合元素的处理。所以返回外部迭代器也有它的优势!比较优秀的是内外部无缝集成。感觉上Ruby偏向于内部迭代,Python更偏向于语法级别的自然外部迭代。
外部迭代器的缺陷:外部迭代器的缺陷在于迭代器(光标)对象需要参照集合对象的内部信息。为了按顺序访问集合对象的各个元素,迭代器对象需要访问集合的内部构造,这就破坏了隐蔽集合内部构造的封装性原则。


4.Prototype

 
 (单词解释the first example of something, such as a machine or other industrial product, from which all later forms are developed)
说明: 明确一个实例最为要生成对象的种类原型,通过复制该实例来生成新的对象。
          静态类型语言往往发挥不出这个模式的作用,在动态类型语言里面才能发挥它的巨大威力。
          甚至于 Prototype模式应该称之为编程范式(Paradigm)更合适。
          例如大部分编程语言从编程范式上来说都是类模式,但是JavaScript就是一种原型模式,JavaScript不直接定于类,
          然后由类来生成对象,而是直接复制对象,然后往对象上添加属性和方法变成新的对象。
为什么:自然而然
如何做:1. 编程范式级别 2.语法级

5. Template Method 模板方法 (为了编写抽象算法的模式)

     说明:在父类的一个方法中定义算法的框架,其中几个步骤的具体内容则留给子类来实现。
     为什么:1. 可以在不改变算法构造的前提下,在子类中定义算法的一些步骤。


6. Observer 模式 (避免高度依赖)
     说明:当某个对象的状态发生变化时,依存于该状态的全部对象都自动(被动)得到通知,而且为了让他们都得到更新,定义了     对象间的一对多的依存关系。这是控制类与类之间依存关系的一种模式。


7. Strategy 模式
     说明:定义算法的集合,将各算法封装,使它们能够交换。

 

分享到:
评论

相关推荐

    松本行弘:Ruby2.0

    在标题“松本行弘:Ruby2.0”及描述“松本行弘向大家介绍了如何使用Ruby2.0。”中,我们可以了解到这段演讲或文章主要由Ruby语言的创造者松本行弘(Yukihiro "Matz" Matsumoto)分享关于Ruby 2.0的相关内容。这表明...

    [Ruby编程语言].弗拉纳根_松本行弘.扫描版.part1.rar

    [Ruby编程语言].弗拉纳根_松本行弘.扫描版.part1.rar 共2个文件

    [Ruby编程语言].弗拉纳根_松本行弘.扫描版.part2.rar

    [Ruby编程语言].弗拉纳根_松本行弘.扫描版.part1.rar 共2个文件

    基于流的并发脚本语言Streem.zip

    Streem 是 Ruby 语言的开发者松本行弘(Matz,全名是Yukihiro Matsumoto)新开发的一种基于流的并发脚本语言,类似于shell,但语法更为丰富,主要受Ruby、Erlang和其他函数式语言的启发。 用Streem可以这么写一个...

    ruby编程学习笔记及demo

    它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。 您可以在 www.ruby-lang.org 的 Ruby 邮件列表上找到松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)的名字。在 Ruby 社区,松本也被...

    Ruby脚本语言介绍及基础语法.zip

    Ruby 是一种面向对象的脚本语言,由松本行弘(Yukihiro Matsumoto,通常被称为Matz)于1995年开发。Ruby 以简洁明了的语法和强大的功能而闻名,它被设计为易于编程和易于阅读。 Ruby 是一种面向对象的脚本语言,由...

    精华ruby学习笔记和代码

    开发者:松本行弘 开发时间:1995年 设计目的:A PROGRAMMER'S BEST FRIEND【程序员的最佳朋友】 文件扩展名:rb 这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类...

    How Emacs change my Life.pdf

    根据描述,本文讲述的是Ruby语言的发明者松本行弘(Yukihiro "Matz" Matsumoto)与Emacs编辑器的亲身经历。在这一部分,我们可以预见,文章将围绕Emacs对松本行弘个人以及他职业生涯的影响展开。 从提供的部分内容...

    ruby基础教程(中文第四版).epub

    ——Ruby之父 松本行弘 本书为日本公认的最好的Ruby入门教程。 松本行弘亲自审校并作序推荐。 本书支持最新的Ruby 2.0, 也附带讲解了可运行于1.9版本的代码, 事无巨细且通 俗易懂地讲解了编写程序时所需要的变量...

    Ruby语言介绍及其特点

    Ruby语言的创建背景体现了松本行弘对于编程语言设计理念的独特见解。他认为以往编程语言的开发者过于关注“计算机”,而忽视了“人”的因素,过分强调运行速度而忽略了人的使用体验。基于这样的理念,松本行弘希望...

    松本智能 系列产品手册.rar

    《松本智能系列产品手册》是一份综合性的资料,详尽地介绍了松本智能的各种产品,旨在为用户和潜在客户提供全面的了解和指导。手册涵盖了松本智能在智能家居、智能安防、智能办公等多个领域的创新成果,深入浅出地...

    学习 Ruby 的笔记以及 Demo(简介、语言特性、应用场景、Ruby 注释、Ruby 文件的构造与析构语句Ruby 变量等)

    开发者:松本行弘 开发时间:1995年 设计目的:A PROGRAMMER'S BEST FRIEND【程序员的最佳朋友】 文件扩展名:rb 2、语言特性 真正的面向对象编程语言 可扩展性强,且易于维护 丰富的语法糖,程序员友好 3、应用场景...

    松本精益手册ppt可编辑版本.ppt

    松本精益手册ppt可编辑版本.ppt

    ruby面向对象设计 Practical Object-Oriented Design in Ruby

    Ruby是一种解释型、面向对象的动态编程语言,由日本人松本行弘(Yukihiro "Matz" Matsumoto)创造,自1995年问世以来,因其简洁的语法和强大的功能,在Web开发领域获得了广泛的应用。Ruby以其优雅的语法和强大的元...

    Q690452提到的3本书

    这三本书分别是《松本行弘的程序世界》、《七周七语言:理解多种编程范型》以及《深入理解C#(第三版)》。接下来,我们将对这三本书的内容进行详细的解读和探讨。 首先,《松本行弘的程序世界》是由日本著名程序员...

    ruby元编程

    更详细列出了发挥其优势的技巧和常用的Ruby设计模式 Ruby创始人松本行弘作序推荐 "&gt;《Ruby元编程》以案例形式循序渐进地介绍了Ruby特有的实用编程技巧 元编程 通过分析案例 讲解例题 回顾Ruby代码库的实现细节 ...

    ruby-1.8.7-p302.tar.gz

    Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、...

    Ruby中文文档.zip

    Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp ...

    Ruby-程序设计-cn.pdf

    Ruby是由日本人松本行弘(Yukihiro Matsumoto)于1995年开始开发的。它的设计哲学是将人类的幸福感放在首位,追求简单、高效且易于阅读的编程体验。Ruby的设计受到了Perl、Smalltalk、Eiffel、Ada和Lisp等语言的影响...

    Ruby程序设计(中文教程)

    Ruby语言起源于20世纪90年代末,由日本人松本行弘(Yukihiro Matsumoto)设计并开发。它的历史可以追溯到1995年,作为一种动态类型的脚本语言,Ruby旨在提高开发者的生产力和代码的可读性。Ruby的名字来源于一种红...

Global site tag (gtag.js) - Google Analytics