中间件技术应用第一部分-设计模式简介课件.ppt
《中间件技术应用第一部分-设计模式简介课件.ppt》由会员分享,可在线阅读,更多相关《中间件技术应用第一部分-设计模式简介课件.ppt(103页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、middleware technology and application 第一部分第一部分 设计设计模式模式简简介介一、什么是一、什么是设计设计模式模式 1设计模式“设计模式(pattern)是从许多优秀的软件系统中总结出的成功的可复用的设计方案”。2GOF之说“尽管Alexander所指的是城市和建筑设计模式,但他的思想也同样适用于面向对象设计模式,只是在面向对象的解决方案里,我们用对象和接口代替了墙壁和门窗。两类模式的核心都在于提供了相关问题的解决方案”。middleware technology and application模式的四个基本要素1名称名称 一个模式的名称高度概括该模式的
2、本质,有利于该行业统一术语、便于交流使用。2问题问题 描述应该在何时使用模式,解释设计问题和问题存在的前因后果,描述在怎样的环境下使用该模式。3方案方案 描述设计的组成部分,它们之间的相互关系及各自的职责和协作方式。4效果效果 描述模式的应用效果及使用模式应当权衡的问题。主要效果包括使用模式对系统的灵活性、扩充性和复用性的影响。middleware technology and application模式的四个基本要素例如,GOF之书如下记录中介者模式:名称名称 中介者问题问题 用一个中介者来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间
3、的交互。方案方案 中介者(Mediator)接口、具体中介者(ConcreteMediator)、同事(Colleague)、具体同事(ConcreteColleague)。效果效果 减少了子类的生成、将各个同事解耦、简化了对象协议、控制集中化。middleware technology and application二、二、设计设计模式的起源模式的起源 软件领域的设计模式起源主要是受到1977年建筑大师Alexander出版的A Pattern Language:Towns,Building,Construction一书。Alexander在其著作中将其建筑行业中的许多问题的最佳解决方案记录
4、为200多种模式,其思想不仅在建筑行业影响深远,而且很快影响到了软件设计领域。middleware technology and applicationmiddleware technology and application2 GOF之著作之著作1目前,被公认在设计模式领域最具影响力的著作是Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides在1994年合作出版的著作:Design Patterns:Elements of Reusable Object-Oriented Software(中译本设计模式:可复用的面向对象软件的基本原理。
5、2该书的四位作者在其著作中记录了他们在四年多的工作中所发现的23个模式。3设计模式一书被广大喜爱者昵称为GOF(Gang of Four)之书,被认为是学习设计模式的必读著作。被公认为是设计模式领域的奠基之作。middleware technology and application3 学学习设计习设计模式的重要性模式的重要性1一个好的设计系统往往是易维护、易扩展、易复用的。2有经验的设计人员或团队知道如何使用面向对象语言编写出易维护、易扩展和易复用的程序代码。3设计模式一书正是从这些优秀的设计系统中总结出的设计精髓。4学习设计模式对提高设计能力无疑是非常有帮助的,尽管GOF之书并没有收集全部
6、的模式,但所阐述的23种模式无疑是使用频率最高的模式。5设计模式的目的不是针对软件设计和开发中的每个问题都给出解决方案,而是针对某种特定环境中通常都会遇到的某种软件开发问题给出的可重用的一些解决方案。middleware technology and application6学习设计模式不仅可以使我们使用好这些成功的模式,更重要的是可以使我们更加深刻地理解面向对象的设计思想,非常有利于我们更好地使用面向对象语言解决设计中的问题。7学习设计模式对于进一步学习、理解和掌握框架是非常有帮助的,比如Java EE中就大量使用了设计模式一书中的模式,对于熟悉设计模式的开发人员,很容易理解这些框架的结构,
7、继而很好地使用框架来设计他们的系统。学学习设计习设计模式的重要性模式的重要性middleware technology and applicationmiddleware technology and application合理使用模式合理使用模式 不是软件的任何部分都需要套用模式来设计的,必须针对具体问题合理的使用模式。1.正确使用正确使用 当你设计某个系统,并确认所遇到的问题刚好适合使用某个模式,就可以考虑使用该模式到你的系统设计中,毕竟该模式已经被公认是解决该问题的成功方案,能使设计的系统易维护、可扩展性强、复用性好,而且这些经典的模式也容易让其他开发人员了解你的系统和设计思想。2.避免
8、教条避免教条模式不是数学公式、也不是物理定律、更不是软件设计中的“法律”条文,你完全可以修改模式中的部分结构以符合你的设计要求。middleware technology and application3.模式挖掘模式挖掘 模式不是用理论推导出来的,而是从真实世界的软件系统中被发现、按着一定规范总结出来的可以被复用的方案。许多文献或书籍里阐述的众多模式实际上都是GOF书中经典模式的变形,这些变形模式都经过所谓的“三次规则”,即该模式已经在真实世界的三个方案中被成功的采用。可以从某个系统中洞察出某种新模式,只要经过“三次规则”就会被行业认可。4.避免乱用避免乱用 不是所有的设计中都需要使用模式,
9、因为模式不是发明出来的,而是总结出来的,事实上,真实世界中的许多设计实例都没有使用过GOF之书中的经典模式。在进行设计时,尽可能用最简单的方式满足系统的要求,而不是费尽心机地琢磨如何在这个问题中使用模式.合理使用模式合理使用模式middleware technology and applicationmiddleware technology and application 一个设计中,可能并不需要使用模式就可以很好地满足系统的要求,如果牵强地使用某个模式可能会在系统中增加许多额外的类和对象,影响系统的性能,因为大部分设计模式往往会在系统中加入更多的层,这不但增加复杂性,而且系统的效率也会下降
10、。合理使用模式合理使用模式middleware technology and applicationmiddleware technology and application 例如,GOF描述的中介者模式:“用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互”,该模式在解决方案中并没有提供任何类的代码,只是说明设计者可以针对特定的问题使用该模式给出的方案。框架和模式不同,它不是一种可复用的设计方案,它是由可用于设计解决某个问题的一些类组成的集合,程序设计人员通过使用框架提供的类或扩展框架提供的类进行应用程序的设计,例如。
11、在Java中,开发人员使用Swing框架提供的类设计用户界面;使用Set(集合)框架提供的类处理数据结构相关的算法等。什么是框架什么是框架middleware technology and application2范围不同 模式本质上是逻辑概念,以概念的形式而存在,模式所描述的方案独立于编程语言。Java程序员、C+程序员或SmallTalk程序员都可以在自己的系统设计中使用某个模式。框架的应用的范围是很具体的,它们不是以概念的形式而存在,而是以具体的软件组织而存在,只能被特定的软件设计者使用,比如Java提供的 Swing框架只能为Java应用程序所使用。什么是框架什么是框架middlewa
12、re technology and applicationmiddleware technology and application使用使用Java描述模式的必要性描述模式的必要性 Java不仅可以用来开发大型的桌面应用程序,而且特别适合于Internet的应用开发。目前,Java语言不仅是一门正在被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门基础语言。GOF之书无疑是经典之作,但是该书中的示例代码相当简练,而且是采用C+描述的,另外C+中提到的接口就是指类的方法,但是在Java中,类和接口是两个不同的概念。所以采用Java语言讲解GOF之书中的23个模式,其原因不仅是因为Jav
13、a语言的广泛使用,而且希望设计模式的学习更加适合具有一定Java语言基础的学生和程序员。middleware technology and application第二部分,UML类图简介 Student+name:String#age:int-money:double+setName(String):void#printMess():void+getAge():intsetAge(int):void-getMoney();1.类类(Class)middleware technology and applicationCreator+MAX:int+factoryMethod():Product
14、2.接口(接口(Interface)middleware technology and application3.泛化关系(泛化关系(继继承关系,承关系,Generalization)middleware technology and application4.关关联联关系(关系(Association)middleware technology and applicationmiddleware technology and application6.实现实现关系(关系(Realization)middleware technology and application第三部分第三部分 面向面
15、向对对象的几个基本原象的几个基本原则则3.1 面向抽象原面向抽象原则则1抽象抽象类类和接口和接口(1)抽象(abstract)类 抽象(abstract)类具有如下特点:抽象类中可以有abstract方法,也可以有非abstract方法。抽象类不能用new运算符创建对象。如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的abstract方法,即在子类中将abstract方法重新声明,但必须去掉abstract修饰符,同时要保证声明的方法名字、返回类型、参数个数和类型与父类的abstract方法完全相同。尽管抽象类不能用new运算符创建对象,但它的非abstract子类必须要重写它中的全部
16、abstract方法,这样一来,就可以让抽象抽象类类声明的声明的对对象成象成为为其子其子类对类对象的上象的上转转型型对对象,并象,并调调用用子子类类重写的方法。重写的方法。middleware technology and application(1)抽象)抽象类类 public abstract class A public abstract int add(int x,int y);public B extends A public int add(int x,int y)return x+y;public Application public static void main(Strin
17、g args)A a;a=new B();/a是B类对象的上转型对象 int m=a.add(3,2);middleware technology and applicationmiddleware technology and application(2)接口)接口public interface Com public abstract int sub(int x,int y);Class ComImp implements Com public int sub(int x,int y)return x-y;public Application public static void main
18、(String args)Com com com=new ComImp();/com变量存放ComImp类对象的引用 int m=com.sub(5,2);/com回调ComImp类实现的接口方法 system.out.println(m);middleware technology and application 3.1 面向抽象原面向抽象原则则 所谓面向抽象编程,是指当设计一个类时,不让该类面向具体的类,而是面向抽象类或接口,即所设计类中的重要数据是抽象类或接口声明的变量,而不是具体类声明的变量。middleware technology and applicationmiddleware
19、 technology and application如果您的设计遵守了“开-闭原则”,那么这个设计一定是易维护的,因为在设计中增加新的模块时,不必去修改设计中的核心模块。比如,我们在2.1节给出的设计中有4个类,类图如下:middleware technology and application 通常我们无法让设计的每个部分都遵守“开-闭原则”,甚至不应当这样去做,我们应当把主要精力集中在应对设计中最有可能因需求变化而需要改变的地方,然后想办法应用“开-闭原则”。当设计某些系统时,我们经常需要面向抽象来考虑系统的总体设计,不要考虑具体类,这样就容易设计出满足“开-闭原则”的系统,在程序设计好
20、后,首先对abstract类的修改关闭,否则,一旦修改abstract类,比如,为它再增加一个abstract方法,那么abstract类所有的子类都需要做出修改;应当对增加abstract类的子类开放,即在程序中再增加子类时,不需要修改其它面向抽象类而设计的重要类。middleware technology and application3.3 多用组合少用继承原则 之所以提倡多用组合,少用继承,是因为在许多设计中,人们希望系统的类之间尽量是低耦合的关系,而不希望是强偶合关系。即在许多情况下需要避开继承的缺点,而需要组合的优点。怎样合理地使用组合,而不是使用继承来获得方法的复用需要经过一定时
21、间的认真思考、学习和编程实践才能悟出其中的道理,这也是促使我们学习设计模式的原因之一。关于多用组合,少用继承,在后面的设计模式中,比如装饰模式,策略模式以中介者模式中都有体现。middleware technology and application3.4 高内聚高内聚-低耦合原低耦合原则则 如果类中的方法是一组相关的行为,则称该类是高内聚的,反之称为低内聚的。高内聚便于类的维护,而低内聚不利于类的维护,学习后面迭代器模式时,会更深刻体会到这一原则。所谓低耦合就是尽量不要不要让让一个一个类类含有太多的含有太多的其它其它类类的的实实例的引用例的引用,以避免修改系统的其中一部分会影响到其它部分,比
22、如在后面学习中介者模式时,就会体会到这一原则。模式设计参考网站:middleware technology and application第四部分 23种设计模式 命令模式命令模式 别别名名 动动作作 事事务务)Command pattern 将一个请求封装为一个对象从而使用户可用不同的请求对客户进行参数化对请求排队或记录请求日志以及支持可撤销的操作。middleware technology and application命令模式中的四种角色命令模式中的四种角色接收者(Receiver):是一个类的实例,该实例负责请求与执行相关的操作。命令接口(Command):规定了用来封装请求的若干方法
23、,如execute(),undo().具体命令(ConcreteCommand):是实现命令接口的具体实例请求者(Invoke):是一个包含Command接口变量的类的实例。middleware technology and application命令模式对应的四种角色middleware technology and application命令模式的命令模式的UML类图类图middleware technology and application命令模式的代码实现 public interface Command public abstract void execute();public c
24、lass ConcreteCommand implements Command CompanyArmy army;/含有接收者的引用 ConcreteCommand(CompanyArmy army)this.army=army;public void execute()/封装着指挥官的请求 army.sneakAttack();/偷袭敌人 middleware technology and application命令模式的代码实现 public class CompanyArmy public void sneakAttack()System.out.println(我们知道如何偷袭敌人,保
25、证完成任务);public class ArmySuperior Command command;/用来存放具体命令的引用 public void setCommand(Command command)mand=command;public void startExecuteCommand()command.execute();middleware technology and application命令模式的代码实现public class Application public static void main(String args)CompanyArmy 三连=new CompanyAr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中间件 技术 应用 第一 部分 设计 模式 简介 课件
限制150内