深入浅出设计模式之策略模式_第1页
深入浅出设计模式之策略模式_第2页
深入浅出设计模式之策略模式_第3页
深入浅出设计模式之策略模式_第4页
深入浅出设计模式之策略模式_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计方式的入门战略方式本章的学习要点了解设计方式的用途和优点掌握设计OO的根本原那么了解本章所举的实例开发实例实例描画:我们要开发一个游戏鸭子,可以戏水,可以鸣叫。而且,在游戏中能够出现很多各种各样的鸭子。设计:将设置一个鸭子超类,处理一切鸭子的共有操作,如游泳,鸣叫等,子类实现本人特殊的操作。超类,实现共有的东西,将有特征的东西设为笼统方法绿头鸭红头鸭添加方法假设需求给鸭子添加飞的方法,根据OO带来的问题超类添加一种方法,必然给一切的子类带来同样的方法。上述的例子,就是一切的鸭子都可以飞。如何处理这个问题:我们可以采用子类方法覆盖的方法,如橡皮鸭子不会飞,覆盖橡皮鸭子飞的方法。分析上面我们采用承继的来处理程序的开放性和可扩展性,遇到了问题,为什么会这样?由于超类作为一切类的父类,拥有一切子类的共性,但未来会出现什么子类,无从得知,因此,无法确定哪些是共性方法和共性属性。承继承继本是为了代码的复用,节省子类的代码。但由于未来的不确定性,无法预知子类的多少?承继必需有父类和子类,确定父类的属性和方法很关键。承继的问题代码在多个子类出现不用要的反复无法事先预知一切的子类的一切行为改动父类,会同时改动子类。采用接口接口在Java中是一个非常重要的概念Java不支持多承继,但一个类可以实现多个接口。采用接口覆盖鸭子飞和叫的方法,每一个会飞的或会叫的子类实现接口。接口带来的问题接口可以让每一个子类本人实现有特征的方法。子类的代码无法重用,每一个子类都实现接口,即使子类的行为完全一致,也必需各自实现。软件编写尽量少修正遇到新情况,希望不修正程序或少修正程序。程序必需顺应变化,而本身需求稳定。最不变的就是变化需求改动平台改动数据改动程序设计原那么找出运用中能够需求变化之处,将其独立出来,把它们和无需变化的代码分割开,分而治之。当需求改动时,代码需求改动,这部分是可变的,从而区分出那些是需求改动的,哪些是稳定的代码。上面的例子中,duck类中,fly(),quack()方法会随着duck的不同而改动,因此提取出来duckflyquack我们将duck的fly行为和quack行为分别设计一个类。设计原那么针对接口编程,而不是针对实现编程。我们利用接口代表每一个行为,如FlyBehaviorQuackBehaviorDuck类不实现这个接口,而是由我们设立的行为类来实现。<<interface>>FlyBehaviorfly()FlyWithWingsfly(){…}FlyNoWayfly(){nothing}设计新的类时,子类运用接口所表示的行为,实如今行为类中,而不在子类中。接口可以实现多态在声明对象变量时,最好用超类型。AnimalmakeSound()DogmakeSound〔〕{bark();}Bark(){汪汪叫』CatmakeSound(){meow();}meow(){喵喵叫』Dogd=newDog()d.bark();Animalanimal=newDog();animal.makeSound();a=getAnimal();a.makeSound();实现鸭子的飞行行为<<interface>>FlyBehaviorfly()FlyWithWingsfly(){…}FlyNoWayfly(){nothing}实现鸭子的鸣叫行为<<interface>>QuackBehaviorquack()Quackquack(){普通鸭子叫}MuteQuackquack(){nothing}Squackquack(){橡皮鸭子叫}上述的设计,让鸣叫,飞行等行为曾经与duck类无关了,我们添加duck类的行为,不会影响到鸣叫,飞行等行为留意的问题刚开场设计程序时,能够不会完全预测未来的情况,因此,应该使程序坚持足够的弹性,以应付未来的能够的变化。事先思索的面面俱到是不能够的。飞行,鸣叫等的动作行为成为一个类是可以的。思索题假设如今有了一种新的玩具duck,它采用螺旋浆飞行,该如何处置。什么类还会用到FlywithWings设计思想的实现根据前面我们的设计,我们来实现duck类DuckFlyBehaviorflyBehaviorQuackBehaviorquackBehaviorperformQuack()Swim()Display()performFlay()publicclassDuck{QuackBehaviorquackBehavior;publicvoidperformQuack(){quackBehavior.quack();}子类的详细实现publicclassMallardDuckextendsDuck{publicMallardDuck(){quackBehavior=newQuack();flyBehavior=newFlyWithWings();}publicvoiddisplay(){System.out.pringln(“〞);}}动态设定行为Duck类中参与两个新方法:publicvoidSetFlyBehavior(FlyBehaviorfb){flyBehavior=fb;}publicvoidSetQuackBehavior(QuackBehaviorqb){quackBehavior=qb;}产生一个模型鸭publicclassModelDuckextendsDuck{publicModelDuck(){ quackBehavior=newQuack(); flyBehavior=newFlyNoWay();}publicvoiddisplay(){ System.out.println("Iamamodelduck");}}产生一个新的飞行类publicclassFlyRocketPoweredimplementsFlyBehavior{publicvoidfly(){System.out.println(“Iamflyingwithrocket〞);}动态改动行为Duckmodel=newModelDuck();model.performFly();model.setFlyBehavior(newFlyRocketPowered());Model.performFly();封装行为DuckFlyBehaviorflyBehaviorQuackBehaviorquackBehaviorSwim()Display()performFly()performBehavior()..封装了飞行行为封装了鸣叫行为组合和承继承继是isa关系组合是hasa关系设计原那么,多用组合,少用承继承继的优点是代码的复用,节省初次开发的时间。但添加了后期维护的费用。没有哪一个软件开发完成后,就一成不变的。后期的维护所破费的时间远远大于前期开发的时间。战略方式定义了算法簇,分别封装起来,让它们之间可以相互交换,让算法的变化独立于算法的的运用者。思索迷题p25设计方式的运用每一个行业都有本人的行话,软件设计也不例外。采用行话可以节省很多时间,行话的信息量大在软件行业,设计所采用的各种方式就是设计者之间的行话。运用共享方式的益处减少沟通的信息量站的层次较高不易产生误解有利于刚参与任务人的提高设计方式的运用设计方式的运用首先在于设计者采用设计方式来对软件进展分析设计。设计方式在于如何组织每一个类及类之间的关系。等级高于库和框架。因该说库和框架也运用了某种设计方式。没有关于设计方式的库。设计方式和OO原那么的联络和区别了解和掌握OO原那么并不能设计出高质量,开放性好的优质软件。设计方式在于可以更好的运用OO原那么,设计出顺应变化的软件。设计是一门艺术,取舍很重要,不同人即使运用一样的设计方式,也不一定设计的软件一样。设计时一定要思索未来的变化,千万不要写死。OO根底笼统封装多态承继OO方式 战略方式:定义一组算法簇,分别封装起来,可以相互交换,让算法的变化独立于运用者OO原那

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论