《设计模式概述.ppt》由会员分享,可在线阅读,更多相关《设计模式概述.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机学院软件工程系计算机学院软件工程系设计模式设计模式设计模式设计模式 重庆理工大学-授课:张金荣Email: QQ:(即1211460305)电话:13983103704第第1章章 设计模式概述设计模式概述v莫勇腾,莫勇腾,深入浅出设计模式(深入浅出设计模式(C#、Java版)版)使用教材使用教材本书是一本通俗易懂的设计模式入门指导图书。作者用C#和Java两种语言,借助现实生活范例和图片演示,全面阐释GRASP及GoF 23种设计模式的概念及其编程应用,帮助你领悟设计模式的思想及精华,并将其融会贯通、灵活应用到自己的开发过程中。全书用两章篇幅对设计模式和GRASP作了基本介绍,用三章的篇
2、幅全面展开对23种设计模式的讲解:对于每一种模式,先给出定义,接着通过类比方式用一个现实世界中的例子说明模式的应用,然后分别以C#和Java代码例述模式的架构实现。最后一章给出了两个设计模式综合案例,为读者实践设计模式提供了很好的学习环境。附录部分精心安排了自测题及答案,供读者练习并检验学习效果。本书适合程序开发人员阅读,尤其适合作为大学计算机专业高年级学生和研究生的教学参考书。设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述设计模式概述设计模式概述1负责任地设计对象负责任地设计对象2GoF-创建型设计模式创建型设计模式3GoF-结构型设计模式结构型设计模式4GoF-行为型设计
3、模式行为型设计模式5模式的综合应用模式的综合应用6教材的章节分布教材的章节分布设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述 参考教材参考教材设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述经典的经典的23种模式总浏览种模式总浏览创建型结构型行为型类工厂方法工厂方法(FactoryMethod)适配器适配器(Adapter)解释器解释器(Interpreter)模板方法模板方法(TemplateMethod)对象抽象工厂抽象工厂(AbstractFactory)生成器生成器(Builder)原型原型(Prototype)单态单态(Singleton)适配器适配
4、器(Adapter)桥接桥接(Bridge)组成组成(Composite)装饰装饰(Decorator)外观外观(Facade)享元享元(Flyweight)代理代理(Proxy)责任链责任链(ChainofResponsibility)命令命令(Command)迭代器迭代器(Iterator)中介者中介者(Mediator)备忘录备忘录(Memento)观察者观察者(Observer)状态状态(State)策略策略(Strategy)访问者访问者(Visitor)设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述这本书是设计模式的开创性著作vDesignPatternsElem
5、entsvofReusablevObject-OrientedSoftwarev作者作者E.GammaR.Helm,R.JohnsonJ.Vlissidesv四位作者通常被称为四人帮四位作者通常被称为四人帮(GangofFour,或或GoF),带有戏虐成分带有戏虐成分。设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述 通过课程学习,掌握面向对象思维方法,了解面向对象技术所涉及的各个领域。加强如何专业化地进行面向对象设计,进一步利用工具进行UML建模。学习面向对象程序设计中常用的一些设计模式(Design Patterns)。优化程序设计方法和框架,设计结构良好的程序。对实际案例
6、进行讨论,实习,提高解决实际问题的能力。教学目标教学目标 教学目标教学目标设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述l考核方式(拟)考核方式(拟)v考勤考勤20分分v平时成绩平时成绩20分分v考试(闭卷)考试(闭卷)60分分设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述基本概念 1.1什么是设计模式什么是设计模式1.2设计模式的作用设计模式的作用1.3GRASP模式的分类模式的分类1.4GoF设计模式的分类设计模式的分类1.5模式的学习阶段模式的学习阶段第第1章章设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述1.1 什么是设计模式从一个
7、例子开始:从一个例子开始:设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述从一个例子开始:设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述从一个例子开始:这么做可以吗?这么做可以吗?设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述从一个例子开始:怎么办?怎么办?设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述从一个例子开始:诱饵鸭诱饵鸭设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述从一个例子开始:设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述从一个例子开始:?设计模式-重庆理工软件工程系第第1章
8、章 设计模式概述设计模式概述从一个例子开始:v最终基类最终基类设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述从一个例子开始:v最终实现类最终实现类设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述实现具体鸭子类设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述测试代码设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述从一个例子开始:v在鸭子的最终
9、实现类中在鸭子的最终实现类中那怎么办?那怎么办?设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述1.1 什么是设计模式定义:定义:“设计模式描述了软件设计过程中某一类常设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。见问题的一般性的解决方案。”因此,简单地说,因此,简单地说,我们在发现问题到解决问题这个过程中,常会发我们在发现问题到解决问题这个过程中,常会发现很多问题是重复出现的,或是某个问题的变体,现很多问题是重复出现的,或是某个问题的变体,外在不同,而本质相同,这些问题的本质就是软外在不同,而本质相同,这些问题的本质就是软件的设计模式。每一种设计模式都有其解决
10、的特件的设计模式。每一种设计模式都有其解决的特定问题,需求的变化,导致我们用到的解决该问定问题,需求的变化,导致我们用到的解决该问题的模式随之改变。题的模式随之改变。设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述v我们处理大量问题时我们处理大量问题时,在很多不同的问题中在很多不同的问题中重复出重复出现的一种性质现的一种性质,它使得我们可以使用一种方法来它使得我们可以使用一种方法来描述问题实质并用描述问题实质并用本质上相同本质上相同,但细节永不会重但细节永不会重复复的方法去解决的方法去解决,这种性质就叫这种性质就叫模式模式。v程序设计是思维具体化的一种方式,是思考如何程序设计是
11、思维具体化的一种方式,是思考如何解决问题的过程。设计模式是在解决问题的过程解决问题的过程。设计模式是在解决问题的过程中,一些良好思路的经验集成。中,一些良好思路的经验集成。设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述1.2 设计模式的作用v为什么要学习设计模式为什么要学习设计模式原因有很多,一些非常明显,而另一些则不那么明原因有很多,一些非常明显,而另一些则不那么明显。学习模式最常见的理由是因为我们可以借其:显。学习模式最常见的理由是因为我们可以借其:复用解决方案解决方案通过复用已经公认的设计,我能够在通过复用已经公认的设计,我能够在解决问题时取得先发优势,而且避免重蹈前人
12、覆辙。我可解决问题时取得先发优势,而且避免重蹈前人覆辙。我可以从学习他人的经验中获益,用不着为那些总是会重复出以从学习他人的经验中获益,用不着为那些总是会重复出现的问题再次设计解决方案了;现的问题再次设计解决方案了;确立通用术语确立通用术语开发中的交流和协作都需要共同的词开发中的交流和协作都需要共同的词汇基础和对问题的共识。设计模式在项目的分析和设计阶汇基础和对问题的共识。设计模式在项目的分析和设计阶段提供了共同的基准点。模式还为我们提供了观察问题、段提供了共同的基准点。模式还为我们提供了观察问题、设计过程和面向对象的更高层次的视角,这将使我们从设计过程和面向对象的更高层次的视角,这将使我们从
13、“过早处理细节过早处理细节”的桎梏中解放出来的桎梏中解放出来易重构设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述1.3 GRASP模式的分类2.1InformationExpert(信息专家(信息专家)2.2Creator(创造者(创造者)2.3LowCoupling(低耦合(低耦合)2.4HighCohesion(高内聚(高内聚)2.5Controller(控制器(控制器)2.6Polymorphism(多态(多态)2.7PureFabrication(纯虚构(纯虚构)2.8Indirection(间接(间接)2.9ProtectedVariations(受保护变化(受保护
14、变化)设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述1.4 GoF设计模式的分类v关于关于“DesignPattern”v对已有模式的整理、分类对已有模式的整理、分类v一套描述模式的词汇,可用于交流和文档化一套描述模式的词汇,可用于交流和文档化v为软件设计总结了宝贵的经验,这些设计经验可以被重用,为软件设计总结了宝贵的经验,这些设计经验可以被重用,但不是简单的代码重用但不是简单的代码重用v分类:分类:CreationalPatternsStructuralPatternsBehavioralPatternsv在软件设计模式领域,起到先驱的作用在软件设计模式领域,起到先驱的作用
15、设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述什么是创立性模式(什么是创立性模式(Creational 模式)v物件的产生需要消耗系统资源,所以如何有效率的产生、物件的产生需要消耗系统资源,所以如何有效率的产生、管理与操作物件,一直都是值得讨论的课题,管理与操作物件,一直都是值得讨论的课题,Creational模式即与物件的建立相关,在这个分类下模式即与物件的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向。的模式给出了一些指导原则及设计的方向。SimpleFactory模式AbstractFactory模式Builder模式FactoryMethod模式Proto
16、type模式Singleton模式RegistryofSingleton模式。设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述什么是创立性模式(什么是创立性模式(Creational 模式)v创立性模式创立性模式(Creational Patterns)(Creational Patterns)是是类在实例化类在实例化时使用的模式时使用的模式。v当一些系统在创立对象时当一些系统在创立对象时,需要动态地决定需要动态地决定 怎样怎样创立对象创立对象,创立哪些对象创立哪些对象 v创立性模式告诉我们怎样构造和包装这些动态的创立性模式告诉我们怎样构造和包装这些动态的决定。决定。设计模式-
17、重庆理工软件工程系第第1章章 设计模式概述设计模式概述什么是结构性模式(什么是结构性模式(Structural 模式模式)v如何设计物件之间的静态结构,如何完成物件之间的继承、如何设计物件之间的静态结构,如何完成物件之间的继承、实现与依赖关系,这关乎着系统设计出来是否健壮实现与依赖关系,这关乎着系统设计出来是否健壮(robust):像是易懂、易维护、易修改、耦合度低等):像是易懂、易维护、易修改、耦合度低等等议题。等议题。Structural模式正如其名,其分类下的模式给模式正如其名,其分类下的模式给出了在不同场合下所适用的各种物件关系结构。出了在不同场合下所适用的各种物件关系结构。Defau
18、ltAdapter模式Adapter模式-ObjectAdapterAdapter模式-ClassAdapterBridge模式Composite模式Decorator模式Facade模式Flyweight模式Proxy模式(一)Proxy 模式(二)模式(二)设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述什么是结构性模式(什么是结构性模式(Structural 模式模式)v结构性模式描述结构性模式描述类和对象怎样结合在一起成为较类和对象怎样结合在一起成为较大的结构大的结构。v结构性模式描述两种不同的东西:类与类的实例。结构性模式描述两种不同的东西:类与类的实例。设计模式-重
19、庆理工软件工程系第第1章章 设计模式概述设计模式概述什么是行为设计模式(什么是行为设计模式(Behavioral 模式模式)v物件之间的合作行为构成了程式最终的行为,物件之间若有设计物件之间的合作行为构成了程式最终的行为,物件之间若有设计良好的行为互动,不仅使得程式执行时更有效率,更可以让物件良好的行为互动,不仅使得程式执行时更有效率,更可以让物件的职责更为清晰、整个程式的动态结构(像是物件调度)更有弹的职责更为清晰、整个程式的动态结构(像是物件调度)更有弹性。性。ChainofResponsibility模式Command模式Interpreter模式Iterator模式Mediator模式
20、Memento模式Observer模式State模式Strategy模式TemplateMethod模式Visitor模式设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述什么是行为设计模式(什么是行为设计模式(Behavioral 模式模式)v行为模式设计到算法和对象职责间的分配。行为模式设计到算法和对象职责间的分配。v行为模式不仅是关于类和对象的,而且还描述它们之间的行为模式不仅是关于类和对象的,而且还描述它们之间的作用。作用。v这些模式刻画了运行时刻难以跟踪的复杂的控制流,它帮这些模式刻画了运行时刻难以跟踪的复杂的控制流,它帮助软件设计者在设计软件的时候助软件设计者在设计软
21、件的时候把注意力从控制流转移到把注意力从控制流转移到对象间的联系上对象间的联系上。设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述1.5 模式的学习阶段怎样学好设计模式设计模式是面向对象编程的热门话题之一,越来越多的开发人员认识设计模式是面向对象编程的热门话题之一,越来越多的开发人员认识到设计模式的重要性。采用各种语言实现设计模式的文章也越来越多,但是到设计模式的重要性。采用各种语言实现设计模式的文章也越来越多,但是很多开发人员发现很难将设计模式与实际开发中需要解决的具体问题相联系。很多开发人员发现很难将设计模式与实际开发中需要解决的具体问题相联系。因为使用设计模式的难点往往不
22、在于模式的实现,而在于很难确定哪种模式因为使用设计模式的难点往往不在于模式的实现,而在于很难确定哪种模式可以在现实的应用场景中采用,从而导致了在现实的项目中,面对客户的压可以在现实的应用场景中采用,从而导致了在现实的项目中,面对客户的压力,我们总是采用最直截了当的方法解决问题,来不及多考虑这些方法的优力,我们总是采用最直截了当的方法解决问题,来不及多考虑这些方法的优劣,即使明知将带来更大的麻烦也必须如此。有些时候因为选择了不恰当的劣,即使明知将带来更大的麻烦也必须如此。有些时候因为选择了不恰当的设计模式,使原本简单的问题变得复杂化。设计模式,使原本简单的问题变得复杂化。总是有些优秀的设计人员可
23、以在同样短的时间内做出正确对待的判断,总是有些优秀的设计人员可以在同样短的时间内做出正确对待的判断,他们同样是依靠本能和直觉,只是这种本能是在日常编程开发中一点一滴积他们同样是依靠本能和直觉,只是这种本能是在日常编程开发中一点一滴积累起来的。如同一个剑客在危机时刻的一击,并不是一时的灵光乍现,而是累起来的。如同一个剑客在危机时刻的一击,并不是一时的灵光乍现,而是平时刻苦修炼的结果。平时刻苦修炼的结果。俗话说,紧靠背棋谱成不了围棋高手。只在概念上理解设计模式而不实俗话说,紧靠背棋谱成不了围棋高手。只在概念上理解设计模式而不实现,同样成不了架构设计师。在软件设计时,要有意识地问自己使用还是不现,同
24、样成不了架构设计师。在软件设计时,要有意识地问自己使用还是不使用设计模式,不要匆忙下结论。重视软件质量的改进,如果有可能,则在使用设计模式,不要匆忙下结论。重视软件质量的改进,如果有可能,则在项目后期重构代码。同时注意学习同行的经验,很多开放源码项目是值得学项目后期重构代码。同时注意学习同行的经验,很多开放源码项目是值得学习的。习的。设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述编程语言与设计模式的实现尽管设计模式本身并不要求一定用某种语言来实现,尽管设计模式本身并不要求一定用某种语言来实现,但脱离了具体的实现,就无法真正理解设计模式。但脱离了具体的实现,就无法真正理解设计模
25、式。GOFGOF的的设计模式设计模式是经典之作,但毕竟距现在已经十几年了。是经典之作,但毕竟距现在已经十几年了。这个期间开发平台已经进化了多代,很多新技术已经应用这个期间开发平台已经进化了多代,很多新技术已经应用到编程中。有些技术可以简化设计模式的实现,有些技术到编程中。有些技术可以简化设计模式的实现,有些技术已经采用了设计模式。因此,学习设计模式必须针对所使已经采用了设计模式。因此,学习设计模式必须针对所使用的编程语言和开发平台。一定要注意,不是将用的编程语言和开发平台。一定要注意,不是将设计模设计模式式中的例子转换为中的例子转换为C#C#或者其他语言就等于知道如何实现或者其他语言就等于知道
26、如何实现设计模式了,而是要关注设计模式的精髓,并结合具体的设计模式了,而是要关注设计模式的精髓,并结合具体的语言特点完成其实现。就语言特点完成其实现。就.NET.NET而言,很多技术可以简化设而言,很多技术可以简化设计模式的实现,例如采用反射技术实现工厂和采用委托技计模式的实现,例如采用反射技术实现工厂和采用委托技术实现模板方法等。术实现模板方法等。设计模式-重庆理工软件工程系第第1章章 设计模式概述设计模式概述设计模式的原则设计模式的基础是面向对象,离开面向对象也无从谈论设计模式。所以,学设计模式的基础是面向对象,离开面向对象也无从谈论设计模式。所以,学习设计模式,首先要理解的是面向对象的三
27、大机制,即习设计模式,首先要理解的是面向对象的三大机制,即“封闭封闭”、“继承继承”、“多多态态”。也只有理解这些了,才能去更好的理解设计模式的精髓。当然,反过来,理。也只有理解这些了,才能去更好的理解设计模式的精髓。当然,反过来,理解了设计模式,就能更好的运用面向对象原理。解了设计模式,就能更好的运用面向对象原理。设计模式也有其一定的设计原则可设计模式也有其一定的设计原则可遵循:遵循:1 1、单一职责原则、单一职责原则。我们要把功能尽可能的细分,每一个类应该只负责一块内容我们要把功能尽可能的细分,每一个类应该只负责一块内容或只执行一个任务。那么怎么样才算达到单一职责了呢,那就是当一个类仅有一
28、个或只执行一个任务。那么怎么样才算达到单一职责了呢,那就是当一个类仅有一个引起它变化的原因时。引起它变化的原因时。2 2、开放封闭原则、开放封闭原则。我们应该要做到,尽量不要去修改原有的类,但却可以扩展我们应该要做到,尽量不要去修改原有的类,但却可以扩展现有的功能。现有的功能。3 3、替换原则、替换原则。子类必须能够替换它们的基类。子类必须能够替换它们的基类。4 4、依赖倒置原则、依赖倒置原则。这只归决于二句经典的老话:高层模块不应该依赖于低层这只归决于二句经典的老话:高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应依赖于实现细节,实现细节应该依赖于抽模块,二者都应该依赖于抽象;抽象不应依赖于实现细节,实现细节应该依赖于抽象。象。5 5、接口隔离原则、接口隔离原则。每一个接口都要有明确的定义,不应该强迫客户程序依赖每一个接口都要有明确的定义,不应该强迫客户程序依赖于它们不用的方法。于它们不用的方法。设计模式-重庆理工软件工程系重庆理工大学重庆理工大学计算机学院软件工程系计算机学院软件工程系