第一章 引言

本章主要是让我们大致明白设计模式是干嘛用的,模式分类,设计模式如何解决设计问题以及几种常见的面向对象设计中软件的复用方法。

1.什么是设计模式?

个人理解概括,设计模式是对一类问题的抽象,并描述了该类问题的解决方案。是对用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。

模式四要素:(1)模式名称 。设计模式使得我们能在高的抽象层次上进行设计;(2)问题 。何时使用该模式;(3)解决方案 。对应与设计问题的解决方法,设计的组成成分,之间的相互关系以及各自的职责和协作方式。(4)效果。模式应用的效果以及使用该模式时候应该权衡的问题。

举例:MVC设计模式

MVC,模型/视图/控制器(model/view/controller),被用来构建用户界面。 model是应用对象,view是模型在屏幕上的显示,controller是定义用户界面对用户输入的响应方式。

2.模式分类

(1)创建型模式(creational):

与对象的创建有关。创建型类模式将对象的部分创建工作延迟到子类;创建性对象模式将对象的部分创建延迟到另一个对象。

(2)结构型模式(structual):

处理类或者对象的组合。结构性类模式使用继承组合类;结构性对象模式使用组合对象。

(3)行为型模式(behavioral):

描述类或者对象如何交互,如何分配职责。行为型类模式使用继承描述算法和控制流;行为型对象模式描述一组对象如何协作来完成单个对象不能完成的工作。

3.设计模式如何解决问题

(1)寻找适合的对象

(2)决定对象的粒度

(3)指定对象的接口

(4)描述对象的实现

(5)运用复用机制

    A.继承

优势:白箱复用。父类的实现细节对子类可见,子类可重定义或者覆盖父类的操作。

缺点:破坏了父类的封装性;父类实现的变化会对子类有很大影响,子类严重依赖于父类。

一个解决方法是,只继承抽象类。

    B.组合

优势:黑箱复用。系的功能通过对象的组装或者组合实现,类的实现不可见;对象只通过接口访问,不破坏封装性。

             组合对象通过获得对其他对象的引用而在运行时刻动态地定义。保证每个类被封装,并集中在单任务上。系统的行为将依赖对象间的关系,而不是集中在一个类中。

             面向对象设计原则:优先使用对象组合,而不是类继承。

委托是一种组合的特例。它使得组合具有与继承同样的复用功能。委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给代理者。

   C.模板(参数化类型)

定义一个类型时候,不用指定所用到的其他类型。

  

聚合VS关联或者引用:


当类之间有整体-部分关系的时候,我们就可以使用聚合。


关联或者引用是比聚合更弱的一种耦合关系。C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。没有生命期的依赖。一般是表示为一种引用。


耦合强弱关系: 依赖(对象作为操作的参数)<关联(成员是指针)<聚合(成员是对象)<组合(成员是对象) 


4.设计模式应该支持变化

设计模式在应用程序、工具箱、框架中所起的作用。

(1)应用程序

(2)工具箱

(3)框架

UML中类之间的关系图,可以参考这篇文章:点击打开链接 http://www.cnblogs.com/riky/archive/2007/04/07/704298.html

第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma的更多相关文章

  1. 《设计模式:可复用面向对象软件的基础》【PDF】下载

    <设计模式:可复用面向对象软件的基础>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382288 内容介绍 <设计模式:可复 ...

  2. 设计模式(Design Patterns——可复用面向对象软件的基础

        设 计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问 ...

  3. Java设计模式(Design Patterns)——可复用面向对象软件的基础

    设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了可重用代码.让代码更容易被他 ...

  4. 设计模式可复用面向对象软件设计基础之对象创建型模式—ABSTRACT FACTORY( 抽象工厂)

    意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 在以下情况可以使用 Abstract Factory模式 • 一个系统要独立于它的产品的创建.组合和表示时. • 一 ...

  5. Eclipse之父、《设计模式》作者、Junit作者之Erich Gamma

    Erich Gamma拥有多重权威身份.他是Jazz项目的主要领导人:是Eclipse的项目管理委员会成员,被业界称为“Eclipse之父”: 是经典书<设计模式>的作者四人帮之一,199 ...

  6. C# Language Specification 5.0 (翻译)第一章 引言

    C#(念作 See Sharp)是一种简单.现代.面向对象并且类型安全的编程语言.C# 源于 C 语言家族,因此 C.C++ 和 Java 工程师们能迅速上手.ECMA 国际[1](ECMA Inte ...

  7. Effective java第一章引言

    菜鸟一枚,开始读第一本书<Effective Java>(第二版)~ 看引言就有好多名词不懂(>_<) 导出的API由所有可在定义该API的包之外访问的API元素组成.一个包的 ...

  8. 第一章-第十一题(请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人)--By 侯伟婷

    从邹欣老师的<构建执法:现代软件工程>一书中,我们得到有关这些名词的起源的信息是软件工程的概念是1968年第一次提出的[1].而在一篇专访Margaret Hamilton的报道中,我们通 ...

  9. 进击的Python【第一章】:Python背景初探与Python基础(一)

    Python背景初探 一.Python起源 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做 ...

随机推荐

  1. Performing User-Managed Database-18.4、Restoring Datafiles and Archived Redo Logs

    18.4.Restoring Datafiles and Archived Redo Logs 假定介质故障损坏的一个或多个数据文件,数据文件必须恢复损坏的文件之前恢复. 该位置是不是想恢复原来姿势. ...

  2. Android自动化测试框架新书:交流

    大家觉得编写一本描述MonkeyRunner原理分析的书籍如何?估计大概10万字左右.内容大概分布如下: Monkey实现原理: 去描述运行在目标安卓机器的monkey是如何运行并处理MonkeyRu ...

  3. UpdateModel方法

    WebForm 对 MVC 说:能否借你的UpdateModel方法来用用? 背景 ASP.NET MVC的Controller有个很不错的方法:UpdataModel (相对应的还有TryUpdat ...

  4. jquery+ligerform三级联动下拉框

    如下为ligerform里的三级联动下拉框: var formData=[ {display:,width:,space:,type:"select",group:"区域 ...

  5. leetcode第36题--Sudoku Solver

    题目: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated b ...

  6. jquery抖动的按钮

    http://runjs.cn/detail/tyx8dbag //shakenum:抖动的次数,shakeDistance:抖动的距离 jQuery.fn.Shake = function (sha ...

  7. SSIS中Sql Task 获取系统变量

    原文:SSIS中Sql Task 获取系统变量 执行 SQL 任务使用不同的连接类型时,SQL 命令的语法使用不同的参数标记.例如,ADO.NET 连接管理器类型要求 SQL 命令使用格式为 @var ...

  8. 用HTML和javascript(JS)计算触屏手机手指滑动方向的演示

    移动终端的流行,程序员希望通过HTML+JS完成触屏动作的识别.下面给出具体实现的例子,供大家参考. 将下面的代码复制并保存,用手机访问,现在的手机浏览器一般都支持触屏,针对本演示来讲就是支持三个js ...

  9. Linux--Windows与Linux互传文件

    用惯了windows下的复制粘贴,转到Linux下确实不习惯,而且对于windows上搭建的windows的虚拟机,从主机到虚拟机之间无缝的复制粘贴,想从windows下拷贝文件到命令行的linux下 ...

  10. 传说中的WCF(1):这东西难学吗?

    WCF难学吗? 是啊,这问题估计很多人都会问,也包括阿拉在内,也有此深刻而严重的凝问. 也有人说:“如何某项技术可以化繁为简,学起来轻松一点就好了.”也许,人类开生就摆脱不了一种习性——懒惰:不过,也 ...