




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计模式,什么是设计模式?,模式:在我们身边重复发生的问题,以及解决这些问题的方案和核心内容. 设计模式:软件设计过程中,涉及到的常用问题,以及解决这些问题的方案和核心内容。 设计模式4要素: 名称 记录这个模式相关的问题和解决方案等。 问题的描述 具体的问题的描述。 解决方案 如何解决这类问题,包括设计涉及的组成成分,已经这些部分的职责和相互关系。 效果 模式应用的效果以及应用过程中应该权衡的问题。,什么是设计模式?,例子: smalltakl-80中的mvc模式,MVC 模式效果,设计模式的分类,分类一:模式完成什么样的工作? 创建型 : 与对象的创建有关 结构型: 处理类和对象的组合和结
2、构 对象行为型: 类和对象怎么样交互,如果分配智能的。 分类二:模式用于类还是对象? 类模式处理类与之类的关系,这个关系通过继承关系建立,是静态的,在编译的时候就确定了 对象模式处理对象间的关系,这些关系时刻在变化 比如:创建型类模式把创建的过程延迟到子类,(Factory Method),而创建型对象模式把创建的过程交给其他的对象等,设计模式的分类,设计模式的分类,工厂模式,解决了一个系统中如何创建、组合和表示其中的对象。类创建模式改变被实例化的类,对象创建模式改变具体实例化的对象。 模式的封装性,整个系统关心的只是对于的接口: 把系统中使用哪些具体的类的信息封装起来 隐藏了系统中这些类是如
3、何被创建和组合在一起的细节。 类别 Singleton(单例模式) Abstract Factory(抽象工厂) Builder(生成器) Factory Method (工厂方法) Prototype(原型),创建模式singleton,Singleton 单例模式 目的:保证一个类仅有一个实例对象,并提供访问这个实例的全局访问点。 描述:一个系统要保证有些类的对象是唯一的,比如单一的datasource,单一的文件系统等。 解决:让类负责保存它的唯一实例,保证没有其他实例可以被创建,并且提供了访问改实例的方法。 例子代码:见DesignPattern/creational/sigleton
4、,创建模式singleton,创建模式Abstract Factory,Abstract Factory 抽象工厂 目的:提供一个接口用来创建一系列相关对象,而无需指定他们具体的类。 问题描述:比如需要设计一个支持多种风格标准的用户界面工具包,不同风格为窗口元素比如滚动条、窗口和按钮等定义不同的外观和行为。为保证风格标准间的可移植性,不应该为一个特定的风格硬编码它的窗口组件,不然以后很难更改。 解决方案:我们提供一个WidgetFactory类,这个类声明了一个用来创建一种风格窗口组件的接口。每个窗口组件有一个抽象类,具体之类实现了窗口的特定风格。WidgetFactory类有返回这些具体子类
5、窗口组件的方法,供用户调用。客户使用的都是抽象的接口,无需关心具体的类。,创建模式Abstract Factory,Abstract Factory 抽象工厂 UML图,创建模式Abstract Factory,Abstract Factory 抽象工厂 UML图,Abstract Factory效果,创建模式Factory Method,Factory Method 抽象工厂 目的:提供一个创建一个对象的接口,由子类决定到底要实例化哪一个类,使一个类的实例化延迟到子类。 问题描述:考虑一个应用框架,可以向用户显示多个文档,包括两个抽象类Application和Document,用户必须通过他
6、们的子类做与具体应用相关的实现,Application负责管理Document并根据需要创建他们。问题是Application知道什么时候该实例化Document,当不知道哪一种Document会被创建。 解决方案:Application的子类重定义CreateDocument以返回适当的Document实例。我们称这个CreateDocument是一个Factory Method,它负责生长一个对象。,Factory MethodUML,Factory Method,例子:creational/factory_method 效果:,结构型模式,结构型模式涉及到面向对象设计中如何组织类和对象的
7、结构,描述了如何对一些对象进行组合,以达到一些新的功能。 类别:,Composite 组合模式,Composite 组合模式 目的:将对象组合成树型结构以表示“部分整体”的层次结构。用户对基本对象和组合对象的使用具有一致性。 问题描述:在图形界面中,有一些基本的控件入Text,Line等,也可以通过这些基本的控件组合成复杂的组件,这些复杂的组件还可以组合成更为庞大的组件。例如:Text,Line可以放到一个Container,然后Container又可以和Text或Line或者是Container进行组合。Composite描述了如何组合这些对象,以构照对应的结构。 解决方案: 有一个抽象类,
8、既代表了基本类型也代表了组合类型。,Composite 组合模式,Composite 组合模式,Composite 组合模式,例子: JUnit里面组合模式的应用 见JUnit的改造源码,Decorator 装饰模式,意图:动态的给一些对象添加修饰的效果。因为是动态的添加效果,所以比子类更丰富。 问题描述:有时候我们想把某些对象动态的添加一些功能。比如一个JTable加上一个滚动条等。比较通用的方式就是把这个对象嵌入到另外一个对象里面,由这个对象添加边框或者是滚动条,我们称这个对象为装饰。这个装饰与被装饰的接口一致,接口保持透明,它将客户请求转发给组件,并在转发前做一些额外的操作,比如绘制边框
9、(滚动条)等。,Decorator 装饰模式 UML,Decorator 装饰模式- UML,Proxy 代理模式,目的:为一个对象提供一个代理以控制对这个对象的访问。 问题描述:一个文档中嵌入图形对象的文档编辑器,但是一个这个编辑器的创建开销可能会很大,对于文档我们要求处理迅速,因此我们打开文档时应该避免一次创建开销很大的对象。而且很可能这个对象开始的时候不一定是可见的。要求我们对于很多特殊的对象我们要根据需要进行创建。那么我们在文档里怎么样表示这些大的对象,如何隐藏其中的细节等? 解决:引入代理模式。代理概念可以解释为:在出发点到目的地之间有一道中间层,意为代理.,Proxy 代码模式 -
10、UML,Proxy 代理,Behaorival 行为模式,行为模式涉及算法和对象间职责的分配,不仅描述类和对象的模式,还表示他们之间的通信模式。 分类: 行为类模式:使用继承机制在类间分配行为。如Template Method(算法的抽象定义)和Interpreter模式(解释器)。 行为对象模式:使用对象复合而不是继承。描述一组对等的对象怎样相互协作以完成一个单独对象不能完成的任务。如Observer模式,Strategy模式,Command模式,Visitor模式等等,Command 命令模式,目的:将一个请求封装成一个对象,用不同的请求对客户进行参数化;对请求排队或记录日志,支持可撤销操
11、作等 问题描述:需要向某个对象发送请求,如用户界面工具箱包括按钮和菜单对象,需要响应用户的输入。工具箱不能在按钮和菜单上实现该请求,因为只有使用工具箱的的应用知道哪个对象做什么操作。 解决:Command模式将请求作为一个对象使得工具箱可以向具体应用对象提出请求。有一个抽象的Command类,定义了执行操作的接口,如Execute操作。之类将接收者作为变量,实现Execute操作,指定具体的动作。,Command模式,Command模式,Command JUnit实现,为了实现Command模式,首先定义了一个接口Test,其中Run便是Command的Execute方法。然后又使用Defau
12、lt Adapter模式为这个接口提供缺省实现的抽象类TestCase,这样开发人员就可以从这个缺省实现进行继承,而不必从Test接口直接实现。,package junit.framework; public interface Test public abstract int countTestCases(); public abstract void run(TestResult result);,Template Method 模板方法,目的:定义一个算法的骨架,将具体的步骤延迟到之类。之类可以不改变一个算法的架构即可重定义该算法特定的步骤。 问题描述:在实际的测试中,为了测试业务逻辑,
13、必须构造一些参数或者一些资源,然后才可进行测试,最后必须释放这些系统资源。如测试数据库应用时,必须创建数据库连接Connection,然后执行操作,最后必须释放数据库的连接等。如测试EJB时,必须进行JNDI的LookUp,获得Home接口等。可是如果在一个TestCase中有几个测试方法, 模式:Template Mothod 模板方法,Template Method 模板方法,JUnit例子,Strategy 策略模式,目的:定义一系列的算法,把他们封装起来,并且使他们可以相互转换。 描述:比如有很多算法对文本进行压缩。但是在设计中进行硬性编码是不可取的。一来代码冗长,二来不可替换等等。 解决:定义一系列的类来封装不同的算法。以这种方式封装算法就叫一个策略。,Strategy 策略模式-UML,Observer 观察者模式,目的:定义对象间一对多的依赖关系,当一个对象变化时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年房产中介与房地产开发商合作开发协议范本
- 2025二手汽车二手买卖合同协议书1
- 2025版企业危机公关与媒体应对内训服务合同模板
- 2025版石灰石行业节能减排技术改造合同
- 2025版高科技企业实习生创新项目合作合同
- 2025年度物联网设备软件测试与功能实现合同范本
- 2025年沙发企业品牌形象设计合同下载
- 2025年度生鲜产品市场推广与销售渠道建设合同
- 贵州省思南县2025年上半年事业单位公开遴选试题含答案分析
- 医疗健康产业市场前瞻报告
- 主动脉夹层临床医学专业教学系列课件讲解
- 天津市河北区2024-2025学年九年级上学期12月月考数学试题(含答案)
- 五社联动推进基层治理现代化
- 初中历史新教材培训心得体会
- 车间5S现场管理标准图
- 《高压开关柜》课件
- 装配钳工高级试题(附答案)
- 【数学】一元一次方程的应用(第2课时)课件 2024-2025学年北师大版七年级数学上册
- 甘肃省行政执法人员综合法律知识考试试题库
- GB/T 44739-2024枸杞及其制品中枸杞多糖的测定离子色谱法
- DB41T 1176-2015 危险化学品重大危险源安全评估导则
评论
0/150
提交评论