ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:29.49KB ,
资源ID:30514437      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30514437.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计模式例子.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

设计模式例子.docx

1、设计模式例子设计模式例子【篇一:设计模式例子】【篇二:设计模式例子】经过几天时间的努力,整理,设计模式的demo和资料基本整理完成,首先声明,这些资料部分从网上找的,还有部分是用了 java与模式 书中的例子,里面的模式也是照着这书上的划分的,很不错的一本书,想学习设计模式的同学可以看看。先说说我的体会,每次看设计模式,总会有新的体会,这是第三次我复习复习这方面的知识了,感觉还不错,但是时间久了估计还是会忘,所以最好的办法还是找个例子,忘得时候看看怎么用就行了,我的demo把27种设计模式进行了合并,不同的模式例子,分放在不同的文件中。资料总共有一下27种模式:设计模式主要分三个类型:创建型、

2、结构型和行为型。其中创建型有: 一、singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、abstract factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 三、factory method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,factory method使一个类的实例化延迟到了子类。 四、builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。 五、prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对

3、象。行为型有: 六、iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。 七、observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。 八、template method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,templatemethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。 九、command,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

4、 十、state,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。 十一、strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。 十二、chain of responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系 十三、mediator,中介者模式:用一个中介对象封装一些列的对象交互。 十四、visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。 十五、int

5、erpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 十六、memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。结构型有: 十七、composite,组合模式:将对象组合成树形结构以表示部分整体的关系,composite使得用户对单个对象和组合对象的使用具有一致性。 十八、facade,外观模式:为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。 十九、proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问 二十、

6、adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。 二十一、decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,decorator模式相比生成子类更加灵活。 二十二、bridge,桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。 二十三、flyweight,享元模式除了以上23个模式之外,根据 java与模式 中的分类,还有4种模式,defaultadapter 缺省适配器模式,simplefactory 简单工厂模式,multiton 多例模式, immu

7、table 不变模式下面我来说说怎么阅读每个模式,每个文件中的test.java是该模式的测试类,上面的注解详细描述了该模式的具体介绍和优缺点等等,该包中的其他文件就是一些接口或抽象类等该模式所需要的类,要理解每个模式的思想,要把该包中的几个联系着一起看,为了避免太乱,就分开写了。下面上传几段代码:代理模式的代码:【篇三:设计模式例子】29-感谢观看本文-谢谢- 标签:标题 2016 设计模式例子归纳总结 装饰模式 专业班级:信计080学号:0808060217 官方定义:动态地给一个对象增加其他职责。就扩展对象功能来说,装饰者模式比生成子类更为灵活。装饰这模式利用组合在运行时动态的合成自己想

8、要的对象,这比继承更具弹性。利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为,然而,如果 能够利用组合的做法扩展对象的行为,就可以在运行 时动态地进行扩展。.类应设计的对扩展开放,对修改 关闭。1装饰者和被装饰对象有相同的超类型。可以用一个或多个装饰者包装一个对象。29-感谢观看本文-谢谢- 标签:标题 2016 后,加上自己的行为,以达到特定的目的。4对象可以在任何时候被装饰,所以可以在运行时动态的,不限量的用你喜欢的装饰者来装饰对象。5装饰模式中使用继承的关键是想达到装饰者和被装饰对象的类型匹配,而不是获得其行为。6装饰者一般对组件的客户是透明的,除非客户程

9、序依赖于组件的具体类型。在实际项目中可以根据需 要为装饰者添加新的行为,做到“半透明”装饰者。7适配器模式的用意是改变对象的接口而不一定改变对象的性能,而装饰模式的用意是保持接口并增加 对象的职责。抽象构件角色:定义一个抽象接口,来规范准备附加功能的类。具体构件角色:将要被附加功能的类,实现抽象构件角色接口。抽象装饰者角色:持有对具体构件角色 的引用并定义与抽象构件角色一致的接口。具体装饰 角色:实现抽象装饰者角色,负责为具体构件添加额 外功能。其中,被装饰者与抽象装饰者都继承与抽象构件角色,具体装饰角色继承与抽象装饰角色,之所以让装 29-感谢观看本文-谢谢- 标签:标题 2016 饰者和被

10、装饰者继承于同一组件是想让装饰者和被装 饰者具有统一的类型而非为了继承行为。装饰者模式的基本思想是用装饰者来包装组件使之成为一个同类型的新组件,所以在装饰者角色中,记 录当前对象,利用多态技术,用基类对象引用最终被 包裹后的对象,就获得了组件和所有包裹过组件的行 2.需要动态的给一个对象添加功能,这些功能可以再动态的撤销。3.需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。4.当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产 生大量的子类,使得子类数目呈爆炸性增长。另一种 情况可能是因为类定义被隐藏,或类定义不能用于生

11、 成子类。六、优缺点优点: 1.decorator模式与继承关系的目的都是要扩展对象 的功能,但是 decorator 可以提供比继承更多的灵活 29-感谢观看本文-谢谢- 标签:标题 2016 2.通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。缺 1.这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。2.装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。.装饰模式是针对抽象组件 类型编程。但是,如果你要针对具体组件编程时,就 应该重新思考你的应用架构,以及装饰者是否合适。当然也可以改变component 接口,增加新的公开的行

12、 为,实现“半透明”的装饰者模式。在实际项目中要做 出最佳选择。制作一个可以给人搭配不同的服饰的系统,比如类似qq,网络游戏或论坛都有的avatar 系统.实现方式 29-感谢观看本文-谢谢- 标签:标题 2016 29-感谢观看本文-谢谢- 标签:标题 2016 刚开始学习设计模式的时候,感到这些模式真的非常抽象。今年下半年以来,随着我们组工作重点的转 移,以及我在小组中角色的变化,我开始有条件提出 自己对新系统的设计想法。在设计过程中,我发现了 很多设计模式的用处,也确实应用了很多设计模式, 这让我越来越感到设计模式的重要性,因此我写了这 十余篇专门介绍设计模式的文章,作为我的学习笔记。设

13、计模式可复用的面向对象软件的基础中介 29-感谢观看本文-谢谢- 标签:标题 2016 绍了一共23 种设计模式,我一共写了19 个设计模式, 余下四个,考虑到该模式的应用范围我就没有介绍。在写这些文章时,其中的很多例子都是我在实践中提 炼出来的,当然也有很大一部分是设计模式中的 例子。不过,这四个人生活的年代里现在已经很远了, 所以它们的例子也很古老。让我们更加设计模式 设计模式是个好东西,它给出了很多设计中的技巧与思路,对于很多优秀的设计,它加以总结与提炼。设计模式并非四人团拍脑瓜想出来的,而是他们搜集 了其他人优秀的设计,加以整理出来的,他们不是这 些模式的创造者,仅仅是整理者。应用设计

14、模式会给我们带来很多好处:软件将变得更加灵活,模块之间的耦合度将会降低,效率会提升, 开销会减少。更重要的,设计模式就好像美声唱法中 的花腔,让你的设计更加漂亮。总的来说,设计模式 似乎将软件设计提升到艺术的层次。设计模式已经被广泛的应用了,在现在很多的图形界面框架都使用了 mvc 模式,大量跌代器模式的应 用,彻底改变了我们对集合的操作方式。不仅如此, 应用了设计模式的设计,往往被看成为优秀的设计。这是因为,这些设计模式都是久经考验的。29-感谢观看本文-谢谢- 标签:标题 2016 在学习和使用设计模式的时候,往往出现一个非常严重的误区,那就是设计模式必须严格地遵守,不能 修改。但是设计模

15、式不是设计模型,并非一成不变。正相反,设计模式中最核心的要素并非设计的结构, 而是设计的思想。只有掌握住设计模式的核心思想, 才能正确、灵活的应用设计模式,否则再怎么使用设 计模式,也不过是生搬硬套。当然,掌握设计模式的思想,关键是要仔细研究模式的意图和结构。一个模式的意图,就是使用这个设 计模式的目的,体现了为什么要使用这个模式,也就 是需求问题。这个模式的结构,就是如何去解决这个 问题,是一种手段、一种经典的解决方法,这种解决 方法只是一种建议。两个方面结合起来,明白为什么 需要设计模式,同时明白了如何实现这个模式,就容 易抓住模式的本质思想。在抓住意图和结构的基础上,实践也是掌握设计模式

16、的必要方法。当然,设计模式必须在某个场景下得 到应用才有意义,这也是为什么设计模式中提供 了大量的例子用来说明模式的应用场景,这实际上为 读者提供了一种上下文环境。学外语不是要强调“语言 环境”么,学习设计模式也是这样。29-感谢观看本文-谢谢- 标签:标题 2016 看到网上很多人在讨论设计模式,他们确实很有*,满嘴都是模式的名字,恨不得写个 helloworld 都要应用到设计模式。设计模式确实是好东西,但是, 中国有句古话叫作物极必反,即便是按照辩证法,事 物总要一分为二的看。我们说设计模式的目的是为了让软件更加灵活,重用度更高。但是,某种意义上,设计模式增加了软件 维护的难度,特别是它

17、增加了对象之间关联的复杂度。我们总说,重用可以提高软件开发的效率。如果你是大牛,你自然希望你的设计可以被反复使用 10000 年,那就是:当世界毁灭的时候,你的设计依然存在。然而,现实是一个系统的设计往往在5 年之内就会被 抛弃,这是因为:1,软件技术产生了新的变化,使用 新的技术进行的设计,无论如何都比你的设计好;2, 硬件环境发生了很大变化,你的设计里对开销或者效 率的追求已经没有意义了;3,新的大牛出现了,并且 取代了你的位置。应用设计模式会导致设计周期的加长,但是很多项目还在设计阶段就已经胎死腹中,再好的设计也没有 发挥的余地。当我们向设计模式顶礼膜拜的时候,我 们还必须清醒地看到软件

18、生产中非技术层面上的东西 往往具有决定性作用。10 29-感谢观看本文-谢谢- 标签:标题 2016 理想固然崇高,但现实总是残酷的。如何看清理想与现实的界限,恐怕是需要我们在实践中不断磨砺而 体会出来的。在看完设计模式后,不妨反问以下自己, 这些模式究竟能给你带来什么? interpreter、iterator、state模式 interpreter模式:这个模式主要试图去解释一种语 言。如果你学过形式语言,那么这个模式对你来说是 多余的。iterator模式:这个模式试图隐藏集合的内部表示, 又同时可以使用户依次访问集合中的元素。现在 stl 和java 的跌代器就是应用这个模式的结果。s

19、tate模式:这个模式的意图是允许对象在其状态改 变时修改其行为,好像对象改变了。这个模式的应用 场景是当对象的行为依赖于对象的状态时。为了实现 这个模式,我们可以为每个状态下的行为实现一个类, 当对象的状态发生改变,它调用不同状态对象的实例 方法。注意,以前可能需要使用switch 或者if 语句进 行分支转换,现在则利用多态机制完成。flyweight 这个模式利用共享有效的支持大量的细粒度的对象。比如,编辑软件中,一篇文章有很多个字符,我 们可以对每个字符对象生成一个对象,如果这篇文章 11 29-感谢观看本文-谢谢- 标签:标题 2016 有几m个文字,那么对象的数量肯定是不能容忍的。

20、使用 flyweight 模式,我们将所有的文字对象共享起 来,文章中的字符仅仅是指向共享池中的某个对象的 索引。在这里要搞清楚一件事情,利用flyweight模式不会 有效地减少信息的数量,因为无论是否共享,表达这 么多信息所需要的编码数量是一定的,所以开销不会 大幅减小。只是,这个模式会减少系统中对象的数量, 因为大量的对象会被共享。在编辑软件中,字符对象 被共享,那么一篇文章中的文字,可以按照段落、格 式等等进行结组,一组文字构成一个对象,这样对象 从单个文字变成一组文字,数量大幅减少。在使用 flyweight 模式需要注意的一点,由于对象被共享了, 因此这些对象没有各自的属性,那么根

21、据上下文环境, 我们在使用这些对象的时候,必须向它传递一些参数。在编辑软件中,这些参数可能就是字体、字号、颜色 等等信息。使用flyweight模式还有一个好处,那就是我们可以 在不修改系统的情况下增加享元。command 模式 command模式,将一个请求封装为一个对象。这样, 你可以向客户端发送不同请求的参数,排队或记录请 求,同时可以支持不能执行的请求。12 29-感谢观看本文-谢谢- 标签:标题 2016 在软件中,不同的模块、对象之间经常会各种调用,或者我们称之为请求。传统的方法,我们将请求实现 为函数调用。这样做是最简单的方法,但却在无形之 中增加了模块之间的耦合度。当请求发生很

22、大变化的 时候,系统将变得很难维护。与此同时,当服务端增 加或者删除一个请求的时候,按照传统的方法,客户 端也必须重新编译,这样系统才能正确运行。使用command模式的一个核心思想就是,服务端提 供一个统一的请求处理接口,客户端则通过调用接口 向服务端发送请求,这些请求被封装成对象的形式。在设计模式中,“四人团”并没有强调统一接口的 事情,它强调了另一个方面,那就是封装请求。事实 上,封装一个请求总是要求有一个地方来接受和处理 这个请求的,这个地方实际上就是统一请求接口。象,这个对象保存着请求类型、参数等信息,服务端收到这个命令后就会执行command 对象中的execute 函数,这个函数

23、具体实现了真正的操作。这种实现方 法可以保证增加新的请求而不必重新编译服务端。我 个人认为,command 模式的另一个形式就是在服务端 实现各种操作,command 对象只是负责指明请求的类 型,这样,当服务器端发现请求不正确时,可以忽略 13 29-感谢观看本文-谢谢- 标签:标题 2016 该请求。和上一种形式相比,这种形式更加简洁,但 是缺少灵活性。command模式使得记录请求成为了可能,我们可以 捕获系统中的请求对象,记录他们。composite 模式 composite模式的意图是“将对象组合成树形结构表 示?整体-部分?的层次结构。composite 使得用户对单 个对象和组合

24、对象的使用更具有一致性”。在word中我们经常会将一些图元进行“组合”,组合 以后的图形还可以向简单图元那样进行移动、变形等 等操作;除此以外,在word 中,我们对于一个字符、 一个词组、一句话、一个段落,甚至是整篇文章的操 作是相同的,我们都可以进行剪切、复制,进行字体 与大小的调整,进行颜色的变换。这些例子都是 composite 模式的实例,我们将简单的元素组合成复 杂的元素,然后还可以像操作简单元素那样操作组合 元素。composite模式将子元素组织成树型,实际上,组织 成图型也没有问题。用户总是喜欢组合简单元素,一 方面,用户可以通过这样的组合来进行抽象,另一方 面,用户可以通过

25、组合化简繁琐的操作。composite 模式在各种可视化编辑软件中应用得最为广泛。另一使用composite的经典例子是java 的swing 29-感谢观看本文-谢谢- 标签:标题 2016 统。所有的 swing 组件都是继承自一个叫做 jcomponent 的接口,因此,我们对一个 jframe 作和对一个jbutton的操作是一样的。这同时也使得, jframe 在管理自己的子元素时,它不需要知道他们是 一个jbutton 还是一个jpanel,对它来说,这只是一个 jcomponent。实现composite 模式的关键是良好设计的接口,人 们应该对可能的元素进行分析,并设计出通用的

26、操作。尽可能的保证接口操作对所有元素都是有意义的,否 则就应该将那些只对部分元素有意义的操作下放到子 proxy模式 按照“四人团”的说法,proxy模式可以为控制另一个 对象而提供一个代理或者占位符。这个模式可以使我 们在真正需要的时候创建对象,如果我们不需要这个 对象,proxy 模式会为我们提供一个占位符。如果我 们有大量这样消耗很大的对象的时候,我们就可以使 用proxy 模式,初始情况下,proxy 模式只会提供占位 符而不会真正创建对象,但是对于使用者来说,他看 到是真正的对象而不是一个代理。一旦使用者需要获 得或者更改对象属性的时候,proxy 模式就会创建该 对象,在此之后,我

27、们就可以通过代理访问真正的对 15 29-感谢观看本文-谢谢- 标签:标题 2016 word里面应该是使用了 proxy 模式。打开 一篇含图的很长的文档时,大部分的图片都不会被载 入,而仅仅是提供占位符,只有当用户准备察看这一 页的时候,代理才会真正载入图片。singleton模式一样,proxy 模式都是保证我们可 以按需分配对象,不同的是,singleton 模式还会保证 在全局范围内使用同一个对象实例,而 proxy 则没有 这个功能。visitor模式 按照“四人团”的说法,visitor模式的意图为:将元 素的操作表示成一种结构。这样visitor 模式可以使你 在不修改元素结构的前提下增加新的操作。考虑一个链表,我们需要一个求得最大元素的操作,这个操作可能是遍历每个节点,然后求的最大值。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1