设计模式-1-策略者模式
2016-04-03 22:53
351 查看
策略者模式概念:
定义一系列算法,把他们一个个封装起来,并且使他们可互相替换。该模式是的算法课独立于使用它的客户而变化。
设计原则:
1. 将应用中需要经常变化的代码独立出来,应和那些不需要经常变化的代码分开。
2. 应针对接口,而不是类进行编程。 (!!!感觉是策略者模式重点,针对接口)
3. 在类中应多用组合,少用继承。
1.公司要设计一款游戏:SimUDuck,有各种鸭子
鸭子的行为:
swim() : 所有的鸭子都会游泳且都相同 应该在抽象积累中实现
fly()和quack(): 不是所有的鸭子的特性,有的鸭子会飞有的不会,有的会鸣叫有的不会,两个行为设计成接口,独立于Duck基类,由具体类来实现。----即为策略者模式中的算法族,独立于基类改变。
display() :所有鸭子都有 但是不相同应该在积累中声明一个接口然后在子类中实现。
代码:
基类 鸭子类
fly行为接口
会飞的行为
不会飞行为
quack()行为接口
会quack()
不会quack()
、、
模型鸭子 不会fly() 不会quack()
测试类:
小结:
将基类中的所有对象都有且一样的行为,在抽象基类中实现,让子类复用(此处swim());所有对象都有但行为内容不一定完全一样的,写成接口让具体子类去实现各自的特性(此处display());不是所有的对象都有,差异较大的,经常变化的,抽取出来写成接口,不同的行为内容用不同的子类来实现这个接口此处的的(fly()和qucak())---算法族,这样也可以做到这两个行为与基类完全分离,可以随意变化,通过一个个算法替换来进行相应的功能转换,耦合度较低,扩展性较好。
定义一系列算法,把他们一个个封装起来,并且使他们可互相替换。该模式是的算法课独立于使用它的客户而变化。
设计原则:
1. 将应用中需要经常变化的代码独立出来,应和那些不需要经常变化的代码分开。
2. 应针对接口,而不是类进行编程。 (!!!感觉是策略者模式重点,针对接口)
3. 在类中应多用组合,少用继承。
1.公司要设计一款游戏:SimUDuck,有各种鸭子
鸭子的行为:
swim() : 所有的鸭子都会游泳且都相同 应该在抽象积累中实现
fly()和quack(): 不是所有的鸭子的特性,有的鸭子会飞有的不会,有的会鸣叫有的不会,两个行为设计成接口,独立于Duck基类,由具体类来实现。----即为策略者模式中的算法族,独立于基类改变。
display() :所有鸭子都有 但是不相同应该在积累中声明一个接口然后在子类中实现。
代码:
基类 鸭子类
fly行为接口
会飞的行为
不会飞行为
quack()行为接口
会quack()
不会quack()
、、
模型鸭子 不会fly() 不会quack()
测试类:
小结:
将基类中的所有对象都有且一样的行为,在抽象基类中实现,让子类复用(此处swim());所有对象都有但行为内容不一定完全一样的,写成接口让具体子类去实现各自的特性(此处display());不是所有的对象都有,差异较大的,经常变化的,抽取出来写成接口,不同的行为内容用不同的子类来实现这个接口此处的的(fly()和qucak())---算法族,这样也可以做到这两个行为与基类完全分离,可以随意变化,通过一个个算法替换来进行相应的功能转换,耦合度较低,扩展性较好。
相关文章推荐
- Linux编程- pthread_barrier_xxx介绍
- http://blog.csdn.net/i_bruce/article/details/39555417
- 说一说javascript跨域和jsonp
- 大师带你了解TCP基本功之滑动窗口(2)
- VirtualBox下实现鼠标自动切换和共用剪贴板
- 链表的基本操作
- 哈哈
- 蛇形数列打印问题
- mysql:sql-mode
- ASP.NET MVC:自定义 Route 让你的 Url 更优雅
- 真希望我20几岁就知道的事-一书给20几岁人的建议
- [Enumeration]——vector
- #include<string>与#include<string.h>的区别
- 互联网协议入门(2)
- 大师带你了解TCP基本功之滑动窗口(1)
- 重学STM32---(六)DAC+DMA+TIM
- svg使用小计(二)
- C# TreeView控件动态组树(可控制节点级别)
- Java并发:await/wait 与sleep、yield间的区别
- 一、Android源码分析01-Ubuntu14.04系统Android源码下载