- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式优缺点及应用场景整理
看完发现有不太对的地方告诉我下各设计模式优缺点总结1桥接模式优点:1 将实现予以解耦,让它和界面之间不再永久绑定 2 抽象和实现可以独立扩展,不会影响到对方 3 对于“具体的抽象类”所做的改变,不会影响到客户。缺点:1. 增加了复杂度用途:1. 适合使用在需要跨越多个平台的图形和窗口上 2. 当需要用不同的方式改变接口和实现时,你会发现桥接模式很好用。具体实例:跨平台的软件,不同电视机和不同的遥控器。2生成器模式(建造者模式)优点:将一个复杂对象的创建过程封装起来允许对象通过多个步骤来创建,并且可以改变创建过程向客户隐藏内部的表现产品的实现可以被替换,因为客户只看到一个抽象的接口缺点:与工厂模式相比,采用生成器模式创建对象更复杂,其客户,需要更多的知识领域。用处:用来创建组合结构。典型例子:想不起典型例子还是扯那个画小人,构建小人分画头,画身体,画双手,黄双脚等不同构建部分,全部放在一起构建。3职责链模式优点:将请求的发送者和接收者解耦可以简化你的对象,因为它不需要知道链的结构通过改变链内的成员或调动他们的次序,允许你动态地新增或删除责任缺点:并不保证请求一定会被执行,如果没有任何对象处理它的话,它可能会落到链尾端之外可能不容观察运行时的特征,有碍于除错。用途:经常被使用在窗口系统中,处理鼠标和键盘之类的事件。当算法牵涉到一种链型运算,而且不希望处理过程中有过多的循环和条件选择语句,并且希望比较容易的扩充文法,可以采用职责链模式。1)有多个对象处理请求,到底怎么处理在运行时确定。2)希望在不明确指定接收者的情况下,向多个对象中的一个提交请求。3)可处理一个请求的对象集合应该被动态指定。典型例子:一个请求发送给前台,前台表示我无权管理,将请求传递给财务部门,财务部门再……4蝇量模式(享元)优点:减少运行时对象实例的个数,节省内存将许多“虚拟”对象的状态集中管理缺点:一旦你实现了它,单个的逻辑实现将无法拥有独立而不同的行为用途:当一个类有许多的实例,而这些实例能被同一方法控制的时候,我们就可以使用蝇量模式。(这话什么意思啊,HF书上原话,是这话有问题还是我理解能力有问题?!)具体场景:五子棋中的黑白子,改变坐标状态(x,y),但用同一个实体。5解释器模式(这个模式我真没仔细看)优点:将每一个语法规则表示成一个类,方便事先语言。因为语法由许多类表示,所以你可以轻易地改变或扩展此语言通过在类结构中加入新的方法,可以在解释的同时增加新的行为,例如打印格式的梅花或者进行复制的程序验证。缺点:当语法规则数目太大时,这个模式可能会变得非常繁琐。用途:当你需要实现一个简答的语言时,使用解释器当你有一个简单的语法,切简单比效率更重要时,使用解释器可以处理脚本语言和编程语言典型例子:正则表达式6中介者模式优点:通过将对象彼此解耦,可以增加对象的复用性。通过将控制逻辑集中,可以简化系统维护可以让对象之间传递的消息变得简单而且大幅减少缺点:如果设计不当,中介者对象本身会变得过于复杂用途:常常被用来协调相关的GUI组件(HF设计模式上的原话,这书附录A部分真的有点敷衍)经典例子:我租房,但没有户主信息,我和户主不能直接交替。没关系,中介者类有我和户主的信息,private我,private户主。而我和户主都认识中介者。我将信息传递给中介者,在我中调用中介者.获取信息()方法,中介者获取信息后,再由中介者传递给户主。7备忘录模式优点:将被存储的状态放在外面,不要和关键对象混在一起,可以帮助维护内聚保持关键对象的数据封装提供了容易实现的恢复能力缺点:储存和恢复状态的过程可能相当耗时用途备忘录模式用于存储状态,在java中可以使用序列化。经典例子:游戏中途保存游戏,这时候可以调用保存当前状态方法,再读取的时候调用读取。Java序列化机制在这方面非常的方便。8原型模式优点:向客户隐藏制造新实例的复杂性提供让客户能够产生未知类型对象的选项在某些环境下,复制对象比新建对象更有效缺点:复制对象有时相当复杂用途:在一个复制的类层次中,当系统必须从其中的许多类型创建新对象时,可以考虑原型模式。经典例子:随便拿一个类,给这个类写一个克隆方法,复制当前对象。或者直接用反序列化。9访问者模式优点:允许你对组合结构加入新的操作,无需改变结构本身想要加入新的操作相对容易访问者所进行的操作,其代码是集中在一起的缺点:会打破组合类的封装因为游走的功能牵涉其中,随意对组合结构的改变就更加困难。用途:有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。经典场景:特么访问者模式和翻译器模式,一个看不懂,一个怎么也不想看,到时候要是让我说这两个模式,我就自认倒霉。10简单工厂模式优点:工厂类是整个模式的关
文档评论(0)