第一章 引言

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

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. Linux下tomcat管理查看控制台|杀死tomcat进程

    查看控制台 # tail -f catalina.out 脚本执行权限chmod u+x *.sh #看是否已经有tomcat在运行了 ps -ef |grep tomcat #如果有,用kill; ...

  2. DevExpress gridview下拉框的再次研究

    原文:DevExpress gridview下拉框的再次研究 前几天写了一篇关于研究DevExpress gridview下拉框的随笔(DevExpress gridview下拉框repository ...

  3. VC++.Net CAD编程架构

    1.每个对应的菜单项的图形抽象的, 图形抽象基类, 取决于改变来自子(如矩形.椭圆形) 2.在Doc对象管理列表管理,图形对象,当图形需要重绘或序列存储,通过遍历该列表的对象可以是 3. 每个类的职责 ...

  4. npm err错误

    npm ERR!无法安装任何包的解决办法 通过config命令: npm config set registry http://registry.cnpmjs.org

  5. DDD,ORM还是Ado.Net

    三层还是DDD,ORM还是Ado.Net,何去何从? 我本想把这个问题放到博问去,前几次有去博问问过之类的问题,无奈大神们可能都不屑回答别人的低级问题.所以放到随笔里,一方面把自己对ORM.架构的一些 ...

  6. 记一次内存泄漏DUMP分析

    自从进入一家创业公司以后,逐渐忙成狗,却无所收获,感觉自身的技术能力用武之地很少,工作生活都在业务逻辑中颠倒. 前些天线上服务内存吃紧,让运维把DUMP拿下来,分析一下聊以自慰. 先来统计一下大对象信 ...

  7. ASP.NET WebForm路由模拟

    一.ASP.NET MVC 路由(一)--- ASP.NET WebForm路由模拟 2014-11-08 11:49 by 郝喜路, 232 阅读, 0 评论, 收藏, 编辑 ASP.NET Web ...

  8. .Net编译之AnyCPU - 进阶者系列 - 学习者系列文章

    Visual Studio是一款非常强大的IDE工具,它为我们提供了强大的编码.调试和测试等工具,为我们编好.NET软件提供了强大的支持. 今天早晨想到了Visual Studio编译模式中的CPU类 ...

  9. web浏览器中javascript

    1.异步载入一个js代码function loadasync(url) { var head = document.getElementsByTagName("head")[0]; ...

  10. Mysql高级之主从复制

    原文:Mysql高级之主从复制 主从复制不就是多台服务器嘛!,一个改变另一个也改变啦,内容其实都一样! 原理: 对数据库进行操作会生成一个文件,binlog(二进制文件),从服务器配置relaylog ...