设计模式例子.docx

上传人:b****8 文档编号:30514437 上传时间:2023-08-16 格式:DOCX 页数:16 大小:29.49KB
下载 相关 举报
设计模式例子.docx_第1页
第1页 / 共16页
设计模式例子.docx_第2页
第2页 / 共16页
设计模式例子.docx_第3页
第3页 / 共16页
设计模式例子.docx_第4页
第4页 / 共16页
设计模式例子.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

设计模式例子.docx

《设计模式例子.docx》由会员分享,可在线阅读,更多相关《设计模式例子.docx(16页珍藏版)》请在冰豆网上搜索。

设计模式例子.docx

设计模式例子

设计模式例子

【篇一:

设计模式例子】

【篇二:

设计模式例子】

经过几天时间的努力,整理,设计模式的demo和资料基本整理完成,首先声明,这些资料部分从网上找的,还有部分是用了java与模式书中的例子,里面的模式也是照着这书上的划分的,很不错的一本书,想学习设计模式的同学可以看看。

先说说我的体会,每次看设计模式,总会有新的体会,这是第三次我复习复习这方面的知识了,感觉还不错,但是时间久了估计还是会忘,所以最好的办法还是找个例子,忘得时候看看怎么用就行了,我的demo把27种设计模式进行了合并,不同的模式例子,分放在不同的文件中。

资料总共有一下27种模式:

设计模式主要分三个类型:

创建型、结构型和行为型。

其中创建型有:

一、singleton,单例模式:

保证一个类只有一个实例,并提供一个访问它的全局访问点

二、abstractfactory,抽象工厂:

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

三、factorymethod,工厂方法:

定义一个用于创建对象的接口,让子类决定实例化哪一个类,factorymethod使一个类的实例化延迟到了子类。

四、builder,建造模式:

将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

五、prototype,原型模式:

用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

行为型有:

六、iterator,迭代器模式:

提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

七、observer,观察者模式:

定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

八、templatemethod,模板方法:

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,templatemethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

九、command,命令模式:

将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

十、state,状态模式:

允许对象在其内部状态改变时改变他的行为。

对象看起来似乎改变了他的类。

十一、strategy,策略模式:

定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。

十二、chainofresponsibility,职责链模式:

使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系

十三、mediator,中介者模式:

用一个中介对象封装一些列的对象交互。

十四、visitor,访问者模式:

表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

十五、interpreter,解释器模式:

给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

十六、memento,备忘录模式:

在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

结构型有:

十七、composite,组合模式:

将对象组合成树形结构以表示部分整体的关系,composite使得用户对单个对象和组合对象的使用具有一致性。

十八、facade,外观模式:

为子系统中的一组接口提供一致的界面,fa?

ade提供了一高层接口,这个接口使得子系统更容易使用。

十九、proxy,代理模式:

为其他对象提供一种代理以控制对这个对象的访问

二十、adapter,适配器模式:

将一类的接口转换成客户希望的另外一个接口,adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。

二十一、decrator,装饰模式:

动态地给一个对象增加一些额外的职责,就增加的功能来说,decorator模式相比生成子类更加灵活。

二十二、bridge,桥模式:

将抽象部分与它的实现部分相分离,使他们可以独立的变化。

二十三、flyweight,享元模式除了以上23个模式之外,根据java与模式中的分类,还有4种模式,defaultadapter缺省适配器模式,simplefactory简单工厂模式,multiton多例模式,immutable不变模式下面我来说说怎么阅读每个模式,每个文件中的test.java是该模式的测试类,上面的注解详细描述了该模式的具体介绍和优缺点等等,该包中的其他文件就是一些接口或抽象类等该模式所需要的类,要理解每个模式的思想,要把该包中的几个联系着一起看,为了避免太乱,就分开写了。

下面上传几段代码:

代理模式的代码:

【篇三:

设计模式例子】

29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016设计模式例子归纳总结————装饰模式专业班级:

信计080学号:

0808060217官方定义:

动态地给一个对象增加其他职责。

就扩展对象功能来说,装饰者模式比生成子类更为灵活。

装饰这模式利用组合在运行时动态的合成自己想要的对象,这比继承更具弹性。

利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为,然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。

.类应设计的对扩展开放,对修改关闭。

1.装饰者和被装饰对象有相同的超类型。

.可以用一个或多个装饰者包装一个对象。

29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016后,加上自己的行为,以达到特定的目的。

4.对象可以在任何时候被装饰,所以可以在运行时动态的,不限量的用你喜欢的装饰者来装饰对象。

5.装饰模式中使用继承的关键是想达到装饰者和被装饰对象的类型匹配,而不是获得其行为。

6.装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型。

在实际项目中可以根据需要为装饰者添加新的行为,做到“半透明”装饰者。

7.适配器模式的用意是改变对象的接口而不一定改变对象的性能,而装饰模式的用意是保持接口并增加对象的职责。

抽象构件角色:

定义一个抽象接口,来规范准备附加功能的类。

具体构件角色:

将要被附加功能的类,实现抽象构件角色接口。

抽象装饰者角色:

持有对具体构件角色的引用并定义与抽象构件角色一致的接口。

具体装饰角色:

实现抽象装饰者角色,负责为具体构件添加额外功能。

其中,被装饰者与抽象装饰者都继承与抽象构件角色,具体装饰角色继承与抽象装饰角色,之所以让装29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016饰者和被装饰者继承于同一组件是想让装饰者和被装饰者具有统一的类型而非为了继承行为。

装饰者模式的基本思想是用装饰者来包装组件使之成为一个同类型的新组件,所以在装饰者角色中,记录当前对象,利用多态技术,用基类对象引用最终被包裹后的对象,就获得了组件和所有包裹过组件的行2.需要动态的给一个对象添加功能,这些功能可以再动态的撤销。

3.需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。

4.当不能采用生成子类的方法进行扩充时。

一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。

另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

六、优缺点优点:

1.decorator模式与继承关系的目的都是要扩展对象的功能,但是decorator可以提供比继承更多的灵活29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]20162.通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

缺1.这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。

2.装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。

.装饰模式是针对抽象组件类型编程。

但是,如果你要针对具体组件编程时,就应该重新思考你的应用架构,以及装饰者是否合适。

当然也可以改变component接口,增加新的公开的行为,实现“半透明”的装饰者模式。

在实际项目中要做出最佳选择。

制作一个可以给人搭配不同的服饰的系统,比如类似qq,网络游戏或论坛都有的avatar系统.实现方式29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]201629---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016刚开始学习设计模式的时候,感到这些模式真的非常抽象。

今年下半年以来,随着我们组工作重点的转移,以及我在小组中角色的变化,我开始有条件提出自己对新系统的设计想法。

在设计过程中,我发现了很多设计模式的用处,也确实应用了很多设计模式,这让我越来越感到设计模式的重要性,因此我写了这十余篇专门介绍设计模式的文章,作为我的学习笔记。

《设计模式——可复用的面向对象软件的基础》中介29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016绍了一共23种设计模式,我一共写了19个设计模式,余下四个,考虑到该模式的应用范围我就没有介绍。

在写这些文章时,其中的很多例子都是我在实践中提炼出来的,当然也有很大一部分是《设计模式》中的例子。

不过,这四个人生活的年代里现在已经很远了,所以它们的例子也很古老。

让我们更加设计模式设计模式是个好东西,它给出了很多设计中的技巧与思路,对于很多优秀的设计,它加以总结与提炼。

设计模式并非四人团拍脑瓜想出来的,而是他们搜集了其他人优秀的设计,加以整理出来的,他们不是这些模式的创造者,仅仅是整理者。

应用设计模式会给我们带来很多好处:

软件将变得更加灵活,模块之间的耦合度将会降低,效率会提升,开销会减少。

更重要的,设计模式就好像美声唱法中的花腔,让你的设计更加漂亮。

总的来说,设计模式似乎将软件设计提升到艺术的层次。

设计模式已经被广泛的应用了,在现在很多的图形界面框架都使用了mvc模式,大量跌代器模式的应用,彻底改变了我们对集合的操作方式。

不仅如此,应用了设计模式的设计,往往被看成为优秀的设计。

这是因为,这些设计模式都是久经考验的。

29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016在学习和使用设计模式的时候,往往出现一个非常严重的误区,那就是设计模式必须严格地遵守,不能修改。

但是设计模式不是设计模型,并非一成不变。

正相反,设计模式中最核心的要素并非设计的结构,而是设计的思想。

只有掌握住设计模式的核心思想,才能正确、灵活的应用设计模式,否则再怎么使用设计模式,也不过是生搬硬套。

当然,掌握设计模式的思想,关键是要仔细研究模式的意图和结构。

一个模式的意图,就是使用这个设计模式的目的,体现了为什么要使用这个模式,也就是需求问题。

这个模式的结构,就是如何去解决这个问题,是一种手段、一种经典的解决方法,这种解决方法只是一种建议。

两个方面结合起来,明白为什么需要设计模式,同时明白了如何实现这个模式,就容易抓住模式的本质思想。

在抓住意图和结构的基础上,实践也是掌握设计模式的必要方法。

当然,设计模式必须在某个场景下得到应用才有意义,这也是为什么《设计模式》中提供了大量的例子用来说明模式的应用场景,这实际上为读者提供了一种上下文环境。

学外语不是要强调“语言环境”么,学习设计模式也是这样。

29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016看到网上很多人在讨论设计模式,他们确实很有***,满嘴都是模式的名字,恨不得写个helloworld都要应用到设计模式。

设计模式确实是好东西,但是,中国有句古话叫作物极必反,即便是按照辩证法,事物总要一分为二的看。

我们说设计模式的目的是为了让软件更加灵活,重用度更高。

但是,某种意义上,设计模式增加了软件维护的难度,特别是它增加了对象之间关联的复杂度。

我们总说,重用可以提高软件开发的效率。

如果你是大牛,你自然希望你的设计可以被反复使用10000年,那就是:

当世界毁灭的时候,你的设计依然存在。

然而,现实是一个系统的设计往往在5年之内就会被抛弃,这是因为:

1,软件技术产生了新的变化,使用新的技术进行的设计,无论如何都比你的设计好;2,硬件环境发生了很大变化,你的设计里对开销或者效率的追求已经没有意义了;3,新的大牛出现了,并且取代了你的位置。

应用设计模式会导致设计周期的加长,但是很多项目还在设计阶段就已经胎死腹中,再好的设计也没有发挥的余地。

当我们向设计模式顶礼膜拜的时候,我们还必须清醒地看到软件生产中非技术层面上的东西往往具有决定性作用。

1029---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016理想固然崇高,但现实总是残酷的。

如何看清理想与现实的界限,恐怕是需要我们在实践中不断磨砺而体会出来的。

在看完设计模式后,不妨反问以下自己,这些模式究竟能给你带来什么?

interpreter、iterator、state模式interpreter模式:

这个模式主要试图去解释一种语言。

如果你学过形式语言,那么这个模式对你来说是多余的。

iterator模式:

这个模式试图隐藏集合的内部表示,又同时可以使用户依次访问集合中的元素。

现在stl和java的跌代器就是应用这个模式的结果。

state模式:

这个模式的意图是允许对象在其状态改变时修改其行为,好像对象改变了。

这个模式的应用场景是当对象的行为依赖于对象的状态时。

为了实现这个模式,我们可以为每个状态下的行为实现一个类,当对象的状态发生改变,它调用不同状态对象的实例方法。

注意,以前可能需要使用switch或者if语句进行分支转换,现在则利用多态机制完成。

flyweight这个模式利用共享有效的支持大量的细粒度的对象。

比如,编辑软件中,一篇文章有很多个字符,我们可以对每个字符对象生成一个对象,如果这篇文章1129---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016有几m个文字,那么对象的数量肯定是不能容忍的。

使用flyweight模式,我们将所有的文字对象共享起来,文章中的字符仅仅是指向共享池中的某个对象的索引。

在这里要搞清楚一件事情,利用flyweight模式不会有效地减少信息的数量,因为无论是否共享,表达这么多信息所需要的编码数量是一定的,所以开销不会大幅减小。

只是,这个模式会减少系统中对象的数量,因为大量的对象会被共享。

在编辑软件中,字符对象被共享,那么一篇文章中的文字,可以按照段落、格式等等进行结组,一组文字构成一个对象,这样对象从单个文字变成一组文字,数量大幅减少。

在使用flyweight模式需要注意的一点,由于对象被共享了,因此这些对象没有各自的属性,那么根据上下文环境,我们在使用这些对象的时候,必须向它传递一些参数。

在编辑软件中,这些参数可能就是字体、字号、颜色等等信息。

使用flyweight模式还有一个好处,那就是我们可以在不修改系统的情况下增加享元。

command模式command模式,将一个请求封装为一个对象。

这样,你可以向客户端发送不同请求的参数,排队或记录请求,同时可以支持不能执行的请求。

1229---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016在软件中,不同的模块、对象之间经常会各种调用,或者我们称之为请求。

传统的方法,我们将请求实现为函数调用。

这样做是最简单的方法,但却在无形之中增加了模块之间的耦合度。

当请求发生很大变化的时候,系统将变得很难维护。

与此同时,当服务端增加或者删除一个请求的时候,按照传统的方法,客户端也必须重新编译,这样系统才能正确运行。

使用command模式的一个核心思想就是,服务端提供一个统一的请求处理接口,客户端则通过调用接口向服务端发送请求,这些请求被封装成对象的形式。

在《设计模式》中,“四人团”并没有强调统一接口的事情,它强调了另一个方面,那就是封装请求。

事实上,封装一个请求总是要求有一个地方来接受和处理这个请求的,这个地方实际上就是统一请求接口。

象,这个对象保存着请求类型、参数等信息,服务端收到这个命令后就会执行command对象中的execute函数,这个函数具体实现了真正的操作。

这种实现方法可以保证增加新的请求而不必重新编译服务端。

我个人认为,command模式的另一个形式就是在服务端实现各种操作,command对象只是负责指明请求的类型,这样,当服务器端发现请求不正确时,可以忽略1329---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016该请求。

和上一种形式相比,这种形式更加简洁,但是缺少灵活性。

command模式使得记录请求成为了可能,我们可以捕获系统中的请求对象,记录他们。

composite模式composite模式的意图是“将对象组合成树形结构表示?

整体-部分?

的层次结构。

composite使得用户对单个对象和组合对象的使用更具有一致性”。

在word中我们经常会将一些图元进行“组合”,组合以后的图形还可以向简单图元那样进行移动、变形等等操作;除此以外,在word中,我们对于一个字符、一个词组、一句话、一个段落,甚至是整篇文章的操作是相同的,我们都可以进行剪切、复制,进行字体与大小的调整,进行颜色的变换。

这些例子都是composite模式的实例,我们将简单的元素组合成复杂的元素,然后还可以像操作简单元素那样操作组合元素。

composite模式将子元素组织成树型,实际上,组织成图型也没有问题。

用户总是喜欢组合简单元素,一方面,用户可以通过这样的组合来进行抽象,另一方面,用户可以通过组合化简繁琐的操作。

composite模式在各种可视化编辑软件中应用得最为广泛。

另一使用composite的经典例子是java的swing29---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016统。

所有的swing组件都是继承自一个叫做jcomponent的接口,因此,我们对一个jframe作和对一个jbutton的操作是一样的。

这同时也使得,jframe在管理自己的子元素时,它不需要知道他们是一个jbutton还是一个jpanel,对它来说,这只是一个jcomponent。

实现composite模式的关键是良好设计的接口,人们应该对可能的元素进行分析,并设计出通用的操作。

尽可能的保证接口操作对所有元素都是有意义的,否则就应该将那些只对部分元素有意义的操作下放到子proxy模式按照“四人团”的说法,proxy模式可以为控制另一个对象而提供一个代理或者占位符。

这个模式可以使我们在真正需要的时候创建对象,如果我们不需要这个对象,proxy模式会为我们提供一个占位符。

如果我们有大量这样消耗很大的对象的时候,我们就可以使用proxy模式,初始情况下,proxy模式只会提供占位符而不会真正创建对象,但是对于使用者来说,他看到是真正的对象而不是一个代理。

一旦使用者需要获得或者更改对象属性的时候,proxy模式就会创建该对象,在此之后,我们就可以通过代理访问真正的对1529---------------------------------------------感谢观看本文-------谢谢-----------------------------------------------------------[标签:

标题]2016word里面应该是使用了proxy模式。

打开一篇含图的很长的文档时,大部分的图片都不会被载入,而仅仅是提供占位符,只有当用户准备察看这一页的时候,代理才会真正载入图片。

singleton模式一样,proxy模式都是保证我们可以按需分配对象,不同的是,singleton模式还会保证在全局范围内使用同一个对象实例,而proxy则没有这个功能。

visitor模式按照“四人团”的说法,visitor模式的意图为:

将元素的操作表示成一种结构。

这样visitor模式可以使你在不修改元素结构的前提下增加新的操作。

考虑一个链表,我们需要一个求得最大元素的操作,这个操作可能是遍历每个节点,然后求的最大值。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

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

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