设计模式-可复用面向对象软件的基础 [读书笔记]

好书系列之-设计模式可复用面向对象软件基础 1 第1章引言设计面向对象软件比较困难,而设计可复用面向对象软件就更加困难。你必须找到相关的对象,以适当的粒度将它们归类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计,即使不是不可能的至少也是非常困难的。一个设 阅读详情

由于如下笔记中有直接描述是该书的第几节,因此将该书的封面贴下:

Book Title Page



1.将软件与设计模式比拟为城市与建筑模式,那么在面向对象的解决方案里,我们将对象和接口看成墙壁和门窗,模式的核心在于提供了相关问题的解决方案。

  在软件设计中可能会遇到很多类似的问题,在每次遇到类似问题时我们不必全都新想办法来解决,而可以复用之前解决类似问题的方案,解决问题多之后就

  会有针对特定问题有特定(相对固定)的方式方法来解决,这相对固定的方式方法就是设计模式,其也算是经验总结。

  开篇有两种在设计模式书籍里面很重要的表格和关系图,分别描述了各设计模式设计支持的可变方面以及各个设计模式之间的关系,具体如下:

 DesignForChange

relationshipofsedignpatterns


2.一般来讲,模式有四个基本要素:模式名称(pattern name),问题(problem),解决方案(solution),效果(consequences)。
3.设计模式确定了所包含的类和实例,他们的角色,协作方式以及职责分配。
4.经典的MVC模式主要用到了Observer,Composite和Strategy三种设计模式。
  MVC包括三类对象,模型Model是应用对象,视图View是它在屏幕上的表示,控制器Controller定义用户界面对用户输入的响应方式
5.1.4节设计模式的编目,简短描述了23中设计模式的作用
6.设计模式依据其目的可以分为创建型(Creational),结构型(Structural),行为型(Behavioral)三种类型。
  创建型:与对象的创建有关(5种) Factory Method,Abstract Factory,Builder,Prototype,Singleton
  结构型:处理类或对象的组合(7种)Adapter,Birdge,Composite,Decorator,Facade,FlyWeight,Proxy
  行为型:对类或对象怎样交互和怎样分配职责进行描述(11种) Interpreter,Template Method,Chain of Responsibility,Command,
                                                     Iterator,Mediator,Mementor,Observer,State,Strategy,Visitor
  设计模式如果根据范围来分,则可以分为类模式和对象模式。
  类模式:处理类和子类之间的关系,这些关系通过继承来建立,编译时刻就已经确定下类,属于静态的。(4种)
  对象模式:处理对象间的关系,这些关系在运行时刻是可以变化的,具有动态性。(20种)
7.各设计模式之间也是有关系的,参看1.5中的关系图,各个相关模式之间加上某些需求就可以转换为另外一个模式。
8.复用方式中类继承与对象组合的区别:
  类继承:白箱复用,父类的实现对子类来说完全是透明的,创建新的类很方便,子类只需要少量的扩展即可形成新的类。
        编译时已经决定继承关系,静态,破坏类的封装性,父类的实现有改动直接影响子类,有可能改动并不使用子类,有牵一发而动全身的影响,
        这个可以通过继承抽象类来缓解,这样父类会有较少的具体实现。
  对象组合:黑箱复用,被组合的对象中只能调用组成成员对象的接口,无法知道其它具体实现,可以通过多态对组合成员对象在运行时动态修改
        不破坏封装性。
  优先是用对象组合,而不是类继承。理想状态下,如果你不是想要去创建行的构件,你应该能够只使用对象组合技术,通过组装已有的构件就能够获得
  你需要的功能。
9.委托是一种组合方法,它使得组合具有与继承同样的复用能力,在委托方式下,有两个对象参与处理一个请求,接收请求的对象将操作委托给它的代理
  者(delegate).这类似于子类将请求将给它的父类处理。State,Strategy,Visitor三种模式较多的运用到委托模式,在State模式中,一个对象将请求
  委托给一个描述当前状态的State对象来处理,在Strategy模式中,一个对象将一个特定的请求委托给一个描述请求执行策略的对象,一个对象只有一个
  状态,但它对不同的请求可以有许多策略。这两种模式的目的都是通过改变委托对象来改变委托对象的行为。在Visitor模式中,对象结构的每个元素上
  的操作总是被委托到Visitor对象上。


  委托是对象组合的特例,它告诉你对象组合作为一个代码复用机制可以替代继承。
10.参数化类型提供了除了类继承和对象组合之外的第三种方法来组合面向对象系统中的行为。这三种复用技术存在着较大的差异,对象组合允许你在
   运行时刻改变被组合的行为,但是它存在间接性,比较低效。类继承允许你提供操作的缺省实现,并通过子类重定义这些操作。参数化类型允许你改变
   类所用到的类型,典型的就是模板类,泛型的使用。类继承和参数化类型都不能在运行时刻被改变,即为静态设计,写代码时可以预见执行结果的。
11.1.6.7节,一般容易导致软件重新设计的原因,在软件设计初期就应该注意在这些情况下采用一些设计模式来使得软件松耦合,能够较为容易的进行修
   改和扩展,总之让软件更加灵活,后期维护和扩充起来比较方便。
   1) 通过显示地指定一个类来创建对象。
      Abstract Factory,Factory Method, Prototype
   2) 对特殊操作的依赖
      Chain of Responsibility,Command
   3) 对硬件和软件平台的依赖
      Abstract Factory, Bridge
   4) 对对象表示或实现的依赖
      Abstract Factory, Bridge, Memento,Proxy
   5) 算法依赖
      Builder,Iterator,Strategy,Template Method,Visitor
   6) 紧耦合
      Abstract Factory, Command, Facade, Mediator,Observer,Chain of Responsibility
   7) 通过生成子类来扩充功能
      Bridge, Chain of Responsibility,Composite,Decorator,Observer,Strategy
   8) 不能方便的对类进行修改
      Adapter,Decorator,Visitor
12.参考1.7中表1-2设计模式所支持的设计的可变方面,通过查看这些内容确定是否有必要使用设计模式,以及使用那个设计模式。
13.skip chapter2
14.创建型模式抽象了实例化过程,它帮助一个系统独立于如何创建,组合和表示它的那些对象。一个类创建型模式是用继承来改变被实例化的类,而一个对象
   创建型模式通过将实例化委托给另一个对象。
   创建型模式有两个主旋律:第一,将系统使用哪些具体的类的信息封装起来。第二,隐藏了这些类的实例是如何被创建和放在一起的。因此创建型模式在什么
   时候被创建,谁创建它,它是怎样被创建的等这些方面给于了很大的灵活性。它允许你用结构和功能差别很大的“产品”配置一个系统。配置可以是静态的(编译
   时指定,类继承),也可以是动态的(在运行时,对象组合)。
   [Fro
设计模式-可复用面向对象软件基础读书笔记-第一章-OMT 第一章 一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心 这样你就能一次又一次的使用该方案而不必重复的劳动 模式四要素 page-2 模式名称 问题 解决方案 效果 mvc通过建立一个 订购通知协议 来分离视图和模型 当模型的数据发生变化时 模型就通知他的视图 而视图将与模型通信来访问这些数据 根据目的准则对模式进行分类 创建型 与对象的创建有关 结构型 处理类或... 阅读详情

相关推荐

分析模式可复用对象模型(Analysis.Patterns:Reusable.Object.Models)(中英版)

分析模式-可复用对象模型(Analysis.Patterns-Reusable.Object.Models)(中英版)。

分析模式可复用对象模型- 读书笔记

读后感: Martin Fowler 20年前的书,OO和领域的思想对于今天的我们来说很基础,但在那时应该算是萌芽。Smalltalk语言简单,语法中省略空格可能因为那时的硬件设备昂贵,而不得不做出的选择,但是可读性真的很差,而书中基本是用Smalltalk进行示例。翻开这本书是为了查找财务模型,它没有让我失望,特别是第6章“库存与财务”给了我思维建模的概念。这本书和UML、GOF的“...

weixin_30299709的博客 298

分析模式 可复用对象模型

类设计分析,很好的一本书,具有很好的知道意义。拓宽自己的视野。

作为架构师不能错过哪些书?

1、领域驱动设计:软件核心复杂性应对之道(修订版) 领域驱动设计(DDD)之父作品,众多声名显赫软件师鼎力推荐,深度剖析构建高质量复杂系统的核心技术。 本书主要是为面向对象软件开发人员编写的。软件项目团队的大部分成员都能够从本书的某些部分获益。本书最适合那些正在项目上尝试这些实践的人员,以及那些已经在这样的项目上积累了丰富经验的人员。 要想从本书受益,掌握一些面向对象建模知识是非常必要的,如UML图和Java代码,因此一定要具备基本读懂这些语言的能力,但不必精通细节。了解极限编程的知识有助于从

人邮异步社区 6009

分析模式可复用对象模型学习笔记

1、符号

多看多听多总结 659

设计模式可复用面向对象软件基础读书笔记(1)

目录分析 概括来讲,这本书先讲了“设计模式”的基本概念,研究了一个设计案例,然后重点讲解了23个设计模式。 目录如下: 引言实例研究:设计一个文档编辑器创建型模式(5个)结构型模式(7个)行为型模式(11个)结论 待定杂项 图示的规则文档 总结下设计模式怎样解决设计问题 待定自己的思考 问题的解决是有通用的解决方案的 虽然许多对象来源于现实世界的分析模型,但是也有很多对象现实中并不存在。 待定原话...

主要记录了工作之余胡乱学习的知识,大部分是入门级别的内容。 主要是为了自己未来有用到时能快速上手,相当于是个备忘录。 当然,也很开心其他人可以从中找到对自己有用的信息。^_^ 975

设计模式可复用面向对象软件基础读书笔记(1)

 1. MVC中用到的模式(Model/View/Controller)模型/视图/控制器。 Observer模式:订购/通知。将对象分离,使得一个对象的改变能够影响另一些对象,而这个对象并不需要知道那些被影响的对象的细节。Composite模式:MVC中视图可以嵌套,对象包含对象。将一些对象划为一组,并将该组对象当作一个对象来使用。Strategy模式:Controller可以替

johnhx的专栏 919

设计模式可复用面向对象软件基础读书笔记(3)

模式之间并不是对等、互斥的。他们之间是相互配合的,更像是一种“设计思路”

主要记录了工作之余胡乱学习的知识,大部分是入门级别的内容。 主要是为了自己未来有用到时能快速上手,相当于是个备忘录。 当然,也很开心其他人可以从中找到对自己有用的信息。^_^ 598

设计模式可复用面向对象软件基础读书笔记(2)

这篇笔记讨论了【第二章 实例研究:设计一个文档编辑器】中的内容。 概括讲,这一章通篇在讨论一个名叫Lexi的文档编辑器该如何设计,这其中牵扯到了一些问题。对于每一个问题,程序设计上都会有多个途径可以解决,但是其中有优劣。一个“好”的设计,被期望有一些特点,这些特点会在各方面表现得更优秀。而最终讨论出的解决方案,背后其实是反映了一种设计模式。 下面,就是这些问题: 文档物理结构 文档物理结构的问题是...

主要记录了工作之余胡乱学习的知识,大部分是入门级别的内容。 主要是为了自己未来有用到时能快速上手,相当于是个备忘录。 当然,也很开心其他人可以从中找到对自己有用的信息。^_^ 830

分析模式可复用对象模型

分析模式可复用对象模型<br>PDF

分析模式——可复用对象模型

该书的内容对程序开发人员尤其是对想在程序开发中应用设计模式和建立可复用对象模型有兴趣的人员比较有帮助。

分析模式-可复用对象模型

软件系统设计,超级经典 责任模式 观察和测量模式 针对公司财务的观察模式 库存与账务 使用财务模式 计划 交易 派生合同 交易包 ...

模式设计 分析模式 可复用对象模型

模式设计 分析模式 可复用对象模型

设计模式可复用面向对象软件基础读书笔记(4)

这篇博客记录了书中《第4章:结构型模式》里的要点。 介绍 结构型模式涉及如何组合类和对象以获得更大的结构。 结构型类模式采用继承机制来组合接口或实现。一个简单的例子就是采用多重继承方法将两个以上的类组合成一个类。 结构型对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合。因为可以在运行时改变对象组合关系,所以相比前者有更大的灵活性。 Adapter(适配器) 意图 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 想要解决的问题 例如:自己在写一个图形编辑器时

主要记录了工作之余胡乱学习的知识,大部分是入门级别的内容。 主要是为了自己未来有用到时能快速上手,相当于是个备忘录。 当然,也很开心其他人可以从中找到对自己有用的信息。^_^ 598

<<设计模式-可复用面向对象软件基础>>读书笔记

设计模式有多重要,每个做开发的人都清楚。弄清楚设计模式很难,能熟练运用就更难了。读别人的代码是 一件很享受的事情,因为可以挑比人代码的不足,从而产生优越感。但是,如果你突然发现别人的代码写的特别好,有好多东西看不明白。找不到具体实现,找不到调用位置的时候,你会很尴尬的。人家代码封装的太好了,我们需要学习了,来学习他的代码,学习他的抽象思维。起初,我写代码,都是连在一起的,一个类我写过一万多行的,一

有酒平步上青天 2061

设计模式-可复用面向对象软件基础读书笔记-第一章01

如何选择设计模式以及选择设计模式之后如何使用 每个模式的简介在P5 P6 各个模式之间的关系在 P8 图1-1 P8 P9 寻找合适的对象 (将系统分解成合适的对象集合) 写出问题描述 根据名字动词创建对应的类和操作 根据系统的协作和职责分类 根据对现实世界进行分析建模Composite模式引入了统一对待现实世界中并不存在的对象的抽象方法 等等其他方法 设计模式也可以帮助确定不太明显的抽象和描...

summer的博客 192

设计模式-可复用面向对象软件基础读书笔记-行为型模式

行为模式 行为模式涉及到算法和对象间职责的分配 行为模式不仅描述对象或类的模式 还描述他们之间的通信模式 这些模式刻画了在运行时难以跟踪的复杂的控制流 将你的注意力从控制流转移到对象之间的联系上来 Chain of Responsibility 职责链 意图 使多个对象都有机会处理请求 从而避免请求的发送者和接受者之间的耦合关系 将这些对象连成一条链并沿着这条链传递该请求直到有一个对象处理他...

summer的博客 417

设计模式-可复用面向对象软件基础读书笔记-结构型模式

主旋律 处理类或对象的组合 Adapter 适配器 意图 将一个类的接口转换为客户希望的另外一个接口 可以使得接口不兼容不能一起工作的类可以一起工作 结构图 协作 通常运行时创建一个ConcreteFactory类的实例 产品对象的创建延迟到子类 问题 通常难以支持新种类的产品 因为AbstractFactory确定了可以创建的产品集合 支持新的产品需要扩展该工厂接口 涉及到所有子类...

summer的博客 389
上一篇: Android Building System 分析
下一篇: 《Effective Java》第2章 创建和销毁对象
AnnaLoad
博客等级 码龄16年 7粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值