第1章设计模式概述于卫红_第1页
第1章设计模式概述于卫红_第2页
第1章设计模式概述于卫红_第3页
第1章设计模式概述于卫红_第4页
第1章设计模式概述于卫红_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章设计模式概述 学习设计模式前的相关知识回顾 继承 封装 多态继承的概述继承的概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。 多个类可以称为子类,单独这个类称为父类或者超类。 子类可以直接访问父类中的非私有的属性和行为。 通过 extends 关键字让类与类之间产生继承关系。class SubDemo extends Demo 继承的出现提高了代码的复用性。继承的出现提高了代码的复用性。 继承的出现让类与类之间产生了关系,提供了多继承的出现让类与类之间产生了关系,提供了多态的前提。态的前提。继承的特点继承的特点 J

2、ava只支持单继承,不支持多继承。 一个类只能有一个父类,不可以有多个父类。 class SubDemo extends Demo /ok class SubDemo extends Demo1,Demo2./error Java支持多层继承(继承体系) class A class B extends A class C extends B 定义继承需要注意: 不要仅为了获取其他类中某个功能而去继承 类与类之间要有所属( is a )关系,xx1是xx2的一种。super关键字关键字 super和this的用法相像 this代表本类对象的引用 super代表父类的内存空间的标识。 当子父类出现

3、同名成员时,可以用super进行区分 子类要调用父类构造函数时,可以使用super语句。函数覆盖函数覆盖(Override) 子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。 父类中的私有方法不可以被覆盖。 在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。 覆盖注意事项: 覆盖时,子类方法权限一定要大于等于父类方法权限 静态只能覆盖静态。 覆盖的应用: 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。子类的实例化过程子类的实例化过程 子类中所有的构造函数默认都会访问父类中空

4、参数的构造函数 因为每一个构造函数的第一行都有一条默认的语句super(); 子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的。 当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数。final关键字关键字 final可以修饰类,方法,变量。 final修饰的类不可以被继承。 final修饰的方法不可以被覆盖。 final修饰的变量是一个常量。只能被赋值一次。抽象类1 抽象类概述2 抽象类的特点3 抽象类举例代码讲解4 抽象类相关问题抽象类概述抽象类概述抽象定义: 抽象就是从多个事物中将共性的,本质的内容抽取出来。 例如:狼和狗共

5、性都是犬科,犬科就是抽象出来的概念。抽象类: Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。抽象方法的由来: 多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。 例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。抽象类的特点抽象类的特点 抽象类和抽象方法必须用abstract关键字来修饰。 抽象方法只有方法声明,没有方法体,定义在抽象类中。 格式:修饰符 abstr

6、act 返回值类型 函数名(参数列表) ; 抽象类不可以被实例化,也就是不可以用new创建对象。原因如下: 抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实例。例如:犬科是一个抽象的概念,真正存在的是狼和狗。 而且抽象类即使创建了对象,调用抽象方法也没有意义。 抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。抽象类举例代码讲解抽象类举例代码讲解 雇员示例: 需求:公司中程序员有姓名,工号,薪水,工作内容。 项目经理除了有姓名,工号,薪水,还有奖金,工作内容。 对给出需求进行数据建模。抽象类相关问题抽象类相关问题 抽象类中是否有构造函

7、数? 抽象关键字abstract不可以和哪些关键字共存? 抽象类中可不可以没有抽象方法? 抽象类和一般类的区别 抽象类一定是一个父类么?接口 格式: interface 接口名 接口中的成员修饰符是固定的。成员常量:public static final成员函数:public abstract接口中的成员都是public的。 接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。接口的特点接口是对外暴露的规则。接口是程序的功能扩展。接口的出现降低耦合性。接口可以用来多实现。类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。接口与接口之间可以有继承关系。接口与抽象类共 性:都

8、是不断抽取出来的抽象的概念区别 1:抽象类体现继承关系,一个类只能单继承接口体现实现关系,一个类可以多实现区别 2:抽象类是继承,是 is a 关系接口是实现,是 like a关系区别 3:抽象类中可以定义非抽象方法,供子类直接使用接口的方法都是抽象,接口中的成员都有固定修饰符多态定义:某一类事物的多种存在形态。 例:动物中猫,狗。 猫这个对象对应的类型是猫类型猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物。动物 y = new 猫();动物是猫和狗具体事物中抽取出来的父类型。父类型引用指向了子类对象。多态 程序中体现:父类或者接口的引用指向或者接收自己的子类对象。

9、好处和作用:多态的存在提高了程序的扩展性和后期可维护性 前提:需要存在继承或者实现关系要有覆盖操作多态的特点 成员函数: 编译时:要查看引用变量所属的类中是否有所调用的成员。 在运行时:要查看对象所属的类中是否有所调用的成员。 成员变量: 只看引用变量所属的类。本章教学内容 设计模式的诞生与发展 设计模式的定义与分类 GoF设计模式简介 设计模式的优点 设计模式的相关资源设计模式的诞生与发展 模式的诞生与定义 模式起源于建筑业而非软件业 模式(Pattern)之父美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander博士 A Pattern Language: To

10、wns, Buildings, Construction253个建筑和城市规划模式 模式 Context(模式可适用的前提条件) Theme或Problem(在特定条件下要解决的目标问题) Solution(对目标问题求解过程中各种物理关系的记述)设计模式的诞生与发展Christopher Alexander设计模式的诞生与发展w 模式的诞生与定义 Alexander给出了关于模式的经典定义:每个模式都描给出了关于模式的经典定义:每个模式都描述了一个述了一个在我们的环境中不断出现的问题在我们的环境中不断出现的问题,然后描述了,然后描述了该问题的该问题的解决方案解决方案的核心,通过这种方式,我们

11、可以无的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工数次地重用那些已有的解决方案,无需再重复相同的工作。作。 模式是在模式是在特定环境特定环境中中解决问题解决问题的一种的一种方案方案 设计模式的诞生与发展w 软件模式 1990年,软件工程界开始关注年,软件工程界开始关注Christopher Alexander等等在这一住宅、公共建筑与城市规划领域的重大突破,最早将在这一住宅、公共建筑与城市规划领域的重大突破,最早将该模式的思想引入软件工程方法学的是该模式的思想引入软件工程方法学的是1991-1992年以年以“四四人组人组(Gang of Four,GoF,分

12、别是,分别是Erich Gamma, Richard Helm, Ralph Johnson和和John Vlissides)”自称自称的四位著名软件工程学者,他们在的四位著名软件工程学者,他们在1994年归纳发表了年归纳发表了23种种在软件开发中使用频率较高的设计模式,旨在在软件开发中使用频率较高的设计模式,旨在用模式来统一用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟沟通面向对象方法在分析、设计和实现间的鸿沟。设计模式的诞生与发展设计模式的诞生与发展Erich Gamma苏黎世大学计算机科学博士,是Eclipse、 JUnit 等项目主要技术负责人之一。John Vlissides

13、斯坦福大学计算机科学博士,原IBM研究员,于2005年11月24日因脑瘤去世,享年44岁。Ralph Johnson 墨尔本大学计算机科学博士,原IBM 研究员,现在波士顿顾问集团供职。Richard Helm康奈尔大学计算机科学博士,伊利诺伊大学教授。设计模式的诞生与发展 软件模式 软件模式是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括架构模式和代码模式等,实际上,在软件生存期的每一个阶段都存在着一些被认同的模式。 软件模式可以认为是对软件开发这一特定“问题”的“解法”的某种统一表示,它和Alexander所描述的模式定义完全相同

14、,即软件模式等于一定条件下的出现的问题以及解法。软件模式的基础结构由4个部分构成:问题描述、前提条件(环境或约束条件)、解法和效果。 设计模式的诞生与发展 软件模式设计模式的诞生与发展 软件模式 软件模式与具体的应用领域无关,在模式发现过程中需要遵循大三律(Rule of Three),即只有经过三个以上不同类型(或不同领域)的系统的校验,一个解决方案才能从候选模式升格为模式。设计模式的诞生与发展 设计模式的发展 1987年,Kent Beck和Ward Cunningham借鉴Alexander的模式思想在程序开发中开始应用一些模式 ,在OOPSLA会议上发表了他们的成果。 1990年,OO

15、PSLA与ECOOP联合举办,Erich Gamma和Richard Helm等人开始讨论有关模式的话题(Bruce Anderson主持),“四人组” 正式成立,并开始着手进行设计模式的分类整理工作。 1991 年,OOPSLA,Bruce Anderson主持了首次针对设计模式的研讨会 。 1992 年,OOPSLA ,Anderson再度主持研讨会,模式已经逐渐成为人们讨论的话题。 注: OOPSLA (Object-Oriented Programming, Systems, Languages & Applications,面向对象编程、系统、语言和应用大会),编程语言及软件

16、工程国际顶级会议,2010年改为SPLASH - Systems, Programming, Languages and Applications: Software for Humanity 设计模式的诞生与发展 设计模式的发展 1993年,Kent Beck 和 Grady Booch 赞助了第一次关于设计模式的会议,这个设计模式研究组织发展成为著名的Hillside Group研究组。 1994 年,由Hillside Group发起,在美国伊利诺伊州(Illinois)的Allerton Park召开了第1届关于面向对象模式的世界性会议,名为PLoP(Pattern Languages

17、 of Programs, 编程语言模式会议),简称PLoP94。 1995年,PLoP95 仍在伊利诺伊州的Allerton Park举行 ,“四人组”出版了设计模式:可复用面向对象软件的基础(Design Patterns: Elements of Reusable Object-Oriented Software)一书,本书成为1995年最抢手的面向对象书籍,也成为设计模式的经典书籍。 设计模式的诞生与发展 设计模式的发展 从1995年至今,设计模式在软件开发中得以广泛应用,在Sun的Java SE/Java EE平台和Microsoft的.net平台设计中就应用了大量的设计模式。 诞生

18、了越来越多的与设计模式相关的书籍和网站,设计模式也作为一门独立的课程或作为软件体系结构等课程的重要组成部分出现在国内外研究生和大学教育的课堂上。设计模式的定义与分类 设计模式的定义 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式的定义与分类 设计模式的基本要素 设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括以下四个方面: 模式名称 (Pattern name) 问题 (Problem) 解决

19、方案 (Solution) 效果 (Consequences) 设计模式的定义与分类 设计模式学习步骤 本课程将按照以下次序来学习设计模式: 模式动机与定义 模式结构与分析 模式实例与解析 模式效果与应用 模式扩展 设计模式的定义与分类 设计模式的分类 根据其目的(模式是用来做什么的)可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三种: 创建型模式主要用于创建对象。 结构型模式主要用于处理类或对象的组合。 行为型模式主要用于描述对类或对象怎样交互和怎样分配职责。设计模式的定义与分类 设计模式的分类 根据范围,即模式主要是用于处理类之间关系还

20、是处理对象之间的关系,可分为类模式和对象模式两种: 类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是属于静态的。 对象模式处理对象间的关系,这些关系在运行时刻变化,更具动态性。 GoF设计模式简介 范围范围目的目的创建型模式创建型模式结构型模式结构型模式行为型模式行为型模式类模式类模式工厂方法模式(类)适配器模式解释器模式模板方法模式对象模式对象模式抽象工厂模式建造者模式原型模式单例模式(对象)适配器模式桥接模式组合模式装饰模式外观模式享元模式代理模式职责链模式命令模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式访问者模式GoF设计模式简介 w创建型模

21、式抽象工厂模式抽象工厂模式(Abstract Factory)建造者模式建造者模式(Builder)工厂方法模式工厂方法模式(Factory Method)原型模式原型模式(Prototype)单例模式单例模式(Singleton) GoF设计模式简介 w结构型模式适配器模式适配器模式(Adapter)桥接模式桥接模式(Bridge)组合模式组合模式(Composite)装饰模式装饰模式(Decorator)外观模式外观模式(Facade)享元模式享元模式(Flyweight)代理模式代理模式(Proxy)GoF设计模式简介 w行为型模式 职责链模式职责链模式(Chain of Respons

22、ibility) 命令模式命令模式(Command) 解释器模式解释器模式(Interpreter) 迭代器模式迭代器模式(Iterator) 中介者模式中介者模式(Mediator) 备忘录模式备忘录模式(Memento) 观察者模式观察者模式(Observer) 状态模式状态模式(State) 策略模式策略模式(Strategy) 模板方法模式模板方法模式(Template Method) 访问者模式访问者模式(Visitor)设计模式的优点 设计模式是从许多优秀的软件系统中总结出的成功的、能够实现可维护性复用的设计方案,使用这些方案将避免我们做一些重复性的工作,而且可以设计出高质量的软件

23、系统。 设计模式的主要优点如下: 设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交流,使得设计方案更加通俗易懂。对于使用不同编程语言的开发和设计人员可以通过设计模式来交流系统设计方案,每一个模式都对应一个标准的解决方案,设计模式可以降低开发人员理解系统的复杂度。设计模式的优点 设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式使得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。 设计模式使得设计方案更加灵活,且易于修改。 设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。 设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可以提高软件的设计水平和代码质量。本章小结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论