设计模式解读之一 策略模式

设计模式解读之一 策略模式

ID:40313383

大小:40.00 KB

页数:18页

时间:2019-07-30

设计模式解读之一 策略模式_第1页
设计模式解读之一 策略模式_第2页
设计模式解读之一 策略模式_第3页
设计模式解读之一 策略模式_第4页
设计模式解读之一 策略模式_第5页
资源描述:

《设计模式解读之一 策略模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、设计模式解读之一:策略模式学术部张亚涛当我们掌握了Java的语法,当我们了解了面向对象的封装、继承、多态等特性,当我们可以用Swing、Servlet、JSP技术构建桌面以及Web应用,不意味着我们可以写出面向对象的程序,不意味着我们可以很好的实现代码复用,弹性维护,不意味着我们可以实现在维护、扩展基础上的代码复用。一把刀,可以使你制敌于无形而于江湖扬名,也可以只是一把利刃而使你切菜平静。Java,就是这把刀,它的威力取决于你使用的方式。当我们陷入无尽无止重复代码的泥沼,当我们面临牵一发而动全身的维护恶梦,你应该想起“设计模式”这个行动秘笈。面向对象的精义,看似平淡,其实要经过艰苦实践才

2、能成功。而构造OO系统的隐含经验于是被前人搜集而成并冠以“设计模式”之名。我们应该在编码行动初始就携带以它。接下来,让我们步“四人组”先行者之后,用中国文字、用实际案例领略模式于我们代码焕然一新的改变: 设计模式解读之一:策略模式    1.模式定义          把会变化的内容取出并封装起来,以便以后可以轻易地改动或扩充部分,而不影响不需要变化的其他部分;   2.问题缘起   当涉及至代码维护时,为了复用目的而使用继承,结局并不完美。对父类的修改,会影响到子类型。在超类中增加的方法,会导致子类型有该方法,甚至连那些不该具备该方法的子类型也无法免除。示例,一个鸭子类型:   pub

3、licabstractclassDuck{      //所有的鸭子均会叫以及游泳,所以父类中处理这部分代码      publicvoidquack(){         System.out.println("Quack");      }            publicvoidswim(){         System.out.println("Allducksfloat,evendecoys.");            }            //因为每种鸭子的外观是不同的,所以父类中该方法是抽象的,由子类型自己完成。      publicabstractvoiddi

4、splay();   }   publicclassMallardDuckextendsDuck{      //野鸭外观显示为绿头      publicvoiddisplay(){         System.out.println("Greenhead.");      }   }   publicclassRedHeadDuckextendsDuck{      //红头鸭显示为红头      publicvoiddisplay(){         System.out.println("Redhead.");      }   }   publicclassRubberDu

5、ckextendsDuck{      //橡皮鸭叫声为吱吱叫,所以重写父类以改写行为      publicvoidquack(){         System.out.println("Squeak");      }      //橡皮鸭显示为黄头      publicvoiddisplay(){         System.out.println("Yellowhead.");      }   }   上述代码,初始实现得非常好。现在我们如果给Duck.java中加入fly()方法的话,那么在子类型中均有了该方法,于是我们看到了会飞的橡皮鸭子,你看过吗?当然,我们可以在子

6、类中通过空实现重写该方法以解决该方法对于子类型的影响。但是父类中再增加其它的方法呢?   通过继承在父类中提供行为,会导致以下缺点:   a.代码在多个子类中重复;   b.运行时的行为不容易改变;   c.改变会牵一发动全身,造成部分子类型不想要的改变;   好啦,还是刚才鸭子的例子,你也许想到使用接口,将飞的行为、叫的行为定义为接口,然后让Duck的各种子类型实现这些接口。这时侯代码类似于:   publicabstractclassDuck{      //将变化的行为fly()以及quake()从Duck类中分离出去定义形成接口,有需求的子类中自行去实现      publicv

7、oidswim(){         System.out.println("Allducksfloat,evendecoys.");            }            publicabstractvoiddisplay();   }   //变化的fly()行为定义形成的接口   publicinterfaceFlyBehavior{      voidfly();   }   //变化的quack()行为定义形成的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。