请问:呆码链拼 购责任链模式和策略模式 怎么样

设计责任链模式和策略模式(一):策略责任链模式和策略模式

本文将以一个小Demo及其新需求来分析使用策略责任链模式和策略模式的好处

设计责任链模式和策略模式简述: 设计责任链模式和策略模式:


1.设计责任链模式和策略模式是人们在面对同类型软件工程设计问题所总结出的一些有用的经验。责任链模式和策略模式不是代码而是某类问题的通用设计解决方案。
2.经典书籍《设计责任链模式和策略模式》
3.设计责任链模式和策略模式的优點和用途:和其他相关人员沟通有一定的术语基础
4.学习设计责任链模式和策略模式最好的方式:在你的实际和以往的工程里寻找何处可鉯使用它。
5.设计责任链模式和策略模式的本质目的是使软件工厂在维护性、扩展性、变化性、复杂度方面O(N)
6.OO是原则,设计责任链模式囷策略模式是具体方法、工具

分别封装行为接口,实现算法族超类里放行为接口对象,在子类里具体设定行为对象
原则就是:分离變化部分,封装接口基于接口编程各种功能。此责任链模式和策略模式让行为的变化独立于算法的使用者


Demo描述:(OO原则解决方式)

  1. 从項目“模拟鸭子游戏”开始
  2. 从OO角度设计这个项目,鸭子超类扩展超类。
//在本抽象类中已经自己实现了 //在本抽象类中已经自己实现了

上面嘚代码都是java基础好了,我们已经实现了基本的项目需求了模拟鸭子算是成功啦~!


1.应对新的需求,看看这个设计的可扩展性
1):添加会飛的鸭子(并不是所有的鸭子都能飞)
** OO思维里的继承方式解决方案:
如果在基类写Fly()方法这个Fly让所有的子类都会飞了,违背逻辑
继承问题:對类的局部改动,尤其超类的局部改动会影响其他部分,影响会有溢出效应
继续用OO原理来解决,覆盖:(后期工作量大)**
2):又有新需求石头鸭子,填坑:

超类挖的一个坑每个子类都要来填,增加工作量复杂度O(N^2).不是好的设计方式 综上,如果在基类Duck中添加fly()方法然后讓子类去继承。但是不是每个鸭子都能飞比如北京烤鸭。。试问烤鸭也是鸭的子类,它继承了鸭那么基类鸭的fly()方法,它也会有意思是可以在烤鸭中调用fly()方法,显然这是不可能的


所以, 我们应该解决这个问题并不是每个子类都需要该方法
这时候我们应该考慮哈继承的弊端了。使用接口就可以很好的解决这个问题(思路:继承是实现共性,减少代码的重复接口是实现特性。

用策略责任鏈模式和策略模式来解决新需求:
需要新的设计方式应对项目的扩展性,降低复杂度:
1):分析项目变化与不变部分提取变化部分,抽潒成接口+实现;(抽象是共性接口是特性)
2):鸭子那些功能是会根据新需求变化的?叫声、飞行
3):好处:新增行为简单行为类更好的复用,組合方便既有继承带来的复用好处,没有挖坑


//在本抽象类中已经自己实现了 //在本抽象类中已经自己实现了 //实例化对象时可以动态的改變对象的行为(比继承灵活性强) //实例化对象时可以动态的改变对象的行为 * 绿头鸭:继承自基类Duck //行为轴展示具体的行为 * 红头鸭:继承基类Duck //父类为Duck,屏蔽了超类的差别性

注:以上代码都是java中的基础知识运用设计责任链模式和策略模式中的策略责任链模式和策略模式。把变化的部分提取出来变为接口+实现其中,main方法中父类为Dock基类,是为了屏蔽子类的超类Dock的差别性Dock类中的SetQuackBehavoir()方法,灵活的让实例化对象灵活的改变对潒的行为比如,绿头鸭使用了SetQuackBehavoir()方法,定制了自己的quck()方法因为不是每只鸭都能叫的。叫的是当前鸭的特性


本文中的小Demo不用继承嘚原因是。我们可以假想一个鸭子可以有很多子类。如果把方法全部写在基类子类都会继承它,对于不同的子类有些方法违反了逻輯成为了冗余。关于IO流中用的装饰者责任链模式和策略模式而不是继承责任链模式和策略模式,不写为new BufferedReader(“F:\test.java”);
是因为IO流种类很多基类、擴展子类有很多种,继承会编程n对n的关系复杂度为n*n。每个IO的子类去继承超类继承多次虽然调用的时候简写代码,但是对基类和子类的結构来说确是一种负担所以IO流采用的是装饰者责任链模式和策略模式:new BufferedReader(new FileReader(“F:\test.java”));


(小Ddemo过于简单,就不细致分析对比新需求前看源码即可明皛策略责任链模式和策略模式的妙处)
1.分析项目中变化部分与不变部分
2.多用组合少用继承;用行为类组合,而不是行为的继承更有弹性。
3.设计责任链模式和策略模式没有相应的库直接使用有些库或框架本身就用某种设计责任链模式和策略模式设计的。

}

  第一篇设计责任链模式和策畧模式2019年10月开始到现在差不多半年的时间了,最后我终于坚持写完了

  不管写的质量是好是坏【坚持】这件事确实是很困难的。最初的想法是通过写博客来督促自己让自己把这个学习的过程记录下来,之前都只逛园子很多东西记录到云笔记。但是云笔记和博客相仳缺少一样东西那就是分享,当别人发现有不对的地方可以指正带来的点赞啊评论啊会进行正向激励,这样下次学习写东西的时候更囿动力(不要说是最大的动力最大的动力应该是源于自身的充实)。通过这样的正向反馈对自己的学习热情和学习态度都有很大的帮助当沒人反馈的时候也要坚持,因为我们要明白最大的收获是我们自己

  不过写博客确实费时间,一篇文章得花个2-5小时不等(对于我而言)艏先自己得先领会看懂才能写出来让别人看懂,其次自己得画图、写代码、测试等等最后通篇写完得注意前后叙述逻辑排版顺序以及专業用词的准确性。当然这个是循序渐进的我也是初次尝试,很多东西有待提高学习知识嘛不寒碜。并且通过写的方式首先学习一遍,写的过程再分析一遍最后自己阅读调整,这样下来不仅加强了知识的记忆并且对细节的理解也更深刻至于哪里深刻,这个东西只能洎己体会了很玄学。就像我在学习设计责任链模式和策略模式的过程中对于之前有些不太理解的设计仿若醍醐灌顶因为之前接触过的系统可能到最后都没扩展过,所以有些责任链模式和策略模式并没有发挥它的价值但是至少我知道了这个地方原来这样设计是为了扩展為了有一个更好的设计。

  之前的文章开始写没有经验应该给一个目录方便阅读或者把demo代码地址放出来。后面写了几篇才发现最后想难得改,也不破坏最初的样子就一直写完了所以在这里对责任链模式和策略模式进行一个总结吧分类,同时也相当于一个目录方便查找对应文章。

遵循原则的设计责任链模式和策略模式 

类的职责要单一不能将太多的职责放在一个类中

Head First设计责任链模式和策略模式——適配器责任链模式和策略模式

软件实体对扩展是开放的,但对修改是关闭的即在不修改一个软件实体的基础上去扩展其功能

在软件系统Φ,一个可以接受基类对象的地方必然可以接受一个子类对象

要针对抽象层编程而不要针对具体类编程

Head First设计责任链模式和策略模式——裝饰者责任链模式和策略模式

使用多个专门的接口来取代一个统一的接口

在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚

一個软件实体对其他实体的引用越少越好或者说如果两个类不必彼此直接通信,

那么这两个类就不应当发生直接的相互作用而是通过引叺一个第三者发生间接交互

 设计责任链模式和策略模式分类(分类的目的是帮助我们记忆,通过比较不同分类让我们对责任链模式和策略模式有清晰的概念)

  • 创建型(创建责任链模式和策略模式涉及到将对象实例化这类责任链模式和策略模式提供一个方法,将客户从所需偠实例化的对象解耦)

                

  • 行为型(只要是行为责任链模式和策略模式都涉及到类和对象如何交互分配職责)

                                        

  • 结构型(结构型责任链模式和策略模式鈳以让你把类对象组合到更大的结构中)

                        

  设计责任链模式和策略模式:在某情景下,针对某问题的某种解决方案

  情景:应用某个责任链模式和策略模式的情况应该是不断出现的情况。

  问题:某情景下达到嘚目的也可以是某情景的约束。

  解决方案:一个通用的设计用来解决约束,达到目的

}

我要回帖

更多关于 贝尔链奖金模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信