(1.6)--第5.1章-策略模式软件设计与体系结构.ppt
《(1.6)--第5.1章-策略模式软件设计与体系结构.ppt》由会员分享,可在线阅读,更多相关《(1.6)--第5.1章-策略模式软件设计与体系结构.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5.1章 策略模式1鸭子模拟游戏SimUDuck第5.1章 策略模式2变化让鸭子起飞第5.1章 策略模式3问题:所有的鸭子都可以飞?为了实现复用而使用集成,带来了不必要的麻烦第5.1章 策略模式4解决方案1把橡皮鸭中的fly()方法重载每当有新的鸭子子类出现,我们就要检查并可能需要覆盖fly()和quark()方法第5.1章 策略模式5解决方案2把fly()从超类中抽取出来,放在一个Flyable接口中,使得只有会飞的鸭子才实现此接口代码无法复用继承关系复杂第5.1章 策略模式6问题第5.1章 策略模式7我们的目标当变化发生时,可以用一种对既有代码影响最小的方式来修改软件。设计原则找出应用中
2、可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起如何把会变化的部分抽取并封装起来,以后可以轻易地改动此部分,而不影响不需要变化的其他部分第5.1章 策略模式8分开变化和不变的部分Duck类内的fly()和quack()会随着鸭子的不同而改变第5.1章 策略模式9设计鸭子的行为Duck类不会负责实现Flying与Quacking接口,而是由一组其它类专门实现FlyBehavior与QuackBehavior,这称之为行为类。由行为类而不是Duck类实现行为接口。以往做法:行为来自Duck超类的具体实现,或是继承某个接口并由子类自行实现。Duck的子类将使用接口所表示的行为,所
3、以实际的实现不会被绑定在Duck的子类中。第5.1章 策略模式10实现鸭子的行为飞行和鸣叫的动作已经和鸭子类无关了,可以被其他任何对象复用第5.1章 策略模式11SimUDuck的代码FlyBehavior接口第5.1章 策略模式12SimUDuck的代码QuackBehavior接口第5.1章 策略模式13整合鸭子的行为Duck会将飞行和鸣叫动作委托别人处理,而不是使用定义在Duck类内的飞行和鸣叫方法在Duck类中加入两个实例变量第5.1章 策略模式14整合鸭子的行为实现performQuack()第5.1章 策略模式15设计鸭子的行为设计子类当当MallardDuckMallardDuc
4、k实例化时,它的构造器会把继承来的实例化时,它的构造器会把继承来的quackBehaviorquackBehavior实例变量初始化成实例变量初始化成QuackQuack类型的新实例类型的新实例第5.1章 策略模式16SimUDuck的代码Duck类第5.1章 策略模式17SimUDuck第5.1章 策略模式18测试SimUDuck第5.1章 策略模式19扩展:动态设定行为在Duck类中,加入两个新方法:第5.1章 策略模式20扩展:动态设定行为新建一个ModelDuck类第5.1章 策略模式21扩展:动态设定行为新建一个新的FlyBehavior类型第5.1章 策略模式22扩展:动态设定行为
5、测试SimUDuck第5.1章 策略模式23设计原则针对接口编程,而不是针对实现编程接口:Interface、超类型、概念变量的声明类型是超类型,只要是具体实现该超类型的类所产生的对象,都可以被指定给这个变量。声明类时不用理会以后执行时的真正对象类型,进而真正的行为只有在执行时根据实际状况确定。针对实现编程针对接口编程Dog d=new Dog();d.makeSound();Animal a=new Dog();a.makeSound();a=getAnimal();a.makeSound()第5.1章 策略模式24问题我们是不是一定要先把系统做出来,再看看有哪些地方需要变化,然后才回头去把
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1.6 5.1 策略 模式 软件设计 体系结构
限制150内