




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HeadFirst设计模式学习笔记(JAVA版)鸭子与策略(Strategy)模式 原文转自:/nokiaguy/archive/2009/02/11/1388168.html用户名:会疼的白痴密码:521975123策略模式的设计原则如下: 1.将应用中需要经常变化的代码独立出来,应和那些不需要经常变化的代码分开。 2.应针对接口,而不是类进行编程。 3.在类中应多用组合,少用继承。 例子: 我们要实现一个鸭子模拟器,这个鸭子模拟器由Duck类描述,而Duck类有如下4个行为: 1.display 2.swim 3.fly(飞) 4.quack(叫) 其中swim是所有鸭子都具有的特性,而且所有鸭子的这些特性都相同,因此,这个方法可以直接在Duck类中实现。display方法也是所有鸭子具有的特性,但随着鸭子的种类不同,display也有所不同,因此,display方法应为Duck类的抽象方法。fly和quack并不是所有鸭子的特性,如橡皮鸭子即不会飞,也不会叫。因此,可以将这两个方法看作是两个行为,可将每一个行为设计成一个接口。这样可以和Duck类完全脱离。因为,fly和quack与Duck一点关系都没有(别的东西也可能fly和quack),然后不同的fly和quack分别用实现相应接口的类表示。1. fly行为 2. /飞行接口 3. publicinterfaceFlyBehavior. 4. publicvoidfly(); 5. 6. /飞 7. publicclassFlyWithWingsimplementsFlyBehavior. 8. publicvoidfly() 9. System.out.println(正在用翅膀飞行); 10. 11. 12. /不飞 13. publicclassFlyNoWayimplementsFlyBehavior. 14. publicvoidfly() 15. System.out.println(不会飞); 16. 17. 18. /坐火箭飞 19. publicclassFlyRocketPoweredimplementsFlyBehavior. 20. publicvoidfly() 21. System.out.println(坐火箭飞); 22. 23. fly行为 / 飞行接口 public interface FlyBehavior. public void fly(); / 飞 public class FlyWithWings implements FlyBehavior. public void fly() System.out.println(正在用翅膀飞行); / 不飞 public class FlyNoWay implements FlyBehavior. public void fly() System.out.println(不会飞); /坐火箭飞public class FlyRocketPowered implements FlyBehavior. public void fly() System.out.println(坐火箭飞); 1. quack行为/叫接口 2. publicinterfaceQuackBehavior. 3. publicvoidquack(); 4. 5. /嘎嘎叫 6. publicclassQuackimplementsQuackBehavior. 7. publicvoidquack() 8. System.out.println(嘎嘎叫); 9. 10. 11. /吱吱叫 12. publicclassSqueakimplementsQuackBehavior. 13. publicvoidquack() 14. System.out.println(吱吱叫); 15. 16. 17. /不叫 18. publicclassMuteQuackimplementsQuackBehavior. 19. publicvoidquack() 20. System.out.println(不会叫); 21. 22. 实现Duck类quack行为复制打印1. /叫接口 2. publicinterfaceQuackBehavior. 3. publicvoidquack(); 4. 5. /嘎嘎叫 6. publicclassQuackimplementsQuackBehavior. 7. publicvoidquack() 8. System.out.println(嘎嘎叫); 9. 10. 11. /吱吱叫 12. publicclassSqueakimplementsQuackBehavior. 13. publicvoidquack() 14. System.out.println(吱吱叫); 15. 16. 17. /不叫 18. publicclassMuteQuackimplementsQuackBehavior. 19. publicvoidquack() 20. System.out.println(不会叫); 21. / 叫接口 public interface QuackBehavior. public void quack(); / 嘎嘎叫 public class Quack implements QuackBehavior. public void quack() System.out.println(嘎嘎叫); / 吱吱叫 public class Squeak implements QuackBehavior. public void quack() System.out.println(吱吱叫); / 不叫 public class MuteQuack implements QuackBehavior. public void quack() System.out.println(不会叫); 复制打印1. 实现Duck类1. /鸭子超类 2. publicabstractclassDuck 3. /默认的行为 4. FlyBehavior.flyBehavior; 5. QuackBehavior.quackBehavior; 6. 7. publicDuck() 8. 9. 10. publicvoidsetFlyBehavior.(FlyBehavior.fb) 11. flyBehavior.=fb; 12. 13. 14. publicvoidsetQuackBehavior(QuackBehavior.qb) 15. quackBehavior.=qb; 16. 17. 18. abstractvoiddisplay(); 19. 20. publicvoidperformFly() 21. flyBehavior.fly(); 22. 23. 24. publicvoidperformQuack() 25. quackBehavior.quack(); 26. 27. 28. publicvoidswim() 29. System.out.println(正在游泳); 30. 31. 32. 复制打印1. /鸭子超类 2. publicabstractclassDuck 3. /默认的行为 4. FlyBehavior.flyBehavior; 5. QuackBehavior.quackBehavior; 6. 7. publicDuck() 8. 9. 10. publicvoidsetFlyBehavior.(FlyBehavior.fb) 11. flyBehavior.=fb; 12. 13. 14. publicvoidsetQuackBehavior(QuackBehavior.qb) 15. quackBehavior.=qb; 16. 17. 18. abstractvoiddisplay(); 19. 20. publicvoidperformFly() 21. flyBehavior.fly(); 22. 23. 24. publicvoidperformQuack() 25. quackBehavior.quack(); 26. 27. 28. publicvoidswim() 29. System.out.println(正在游泳); 30. 31. / 鸭子超类 public abstract class Duck / 默认的行为 FlyBehavior. flyBehavior; QuackBehavior. quackBehavior; public Duck() public void setFlyBehavior. (FlyBehavior. fb) flyBehavior. = fb; public void setQuackBehavior(QuackBehavior. qb) quackBehavior. = qb; abstract void display(); public void performFly() flyBehavior.fly(); public void performQuack() quackBehavior.quack(); public void swim() System.out.println(正在游泳); 1. 建立不同的鸭子类建立不同的鸭子类1. /野鸭 2. publicclassMallardDuckextendsDuck 3. 4. publicMallardDuck() 5. 6. quackBehavior.=newQuack(); 7. flyBehavior.=newFlyWithWings(); 8. 9. 10. 11. 12. publicvoiddisplay() 13. System.out.println(绿头鸭); 14. 15. 16. /红头鸭 17. publicclassRedHeadDuckextendsDuck 18. 19. publicRedHeadDuck() 20. flyBehavior.=newFlyWithWings(); 21. quackBehavior.=newQuack(); 22. 23. 24. publicvoiddisplay() 25. System.out.println(红头鸭); 26. 27. 28. /橡皮鸭 29. publicclassRubberDuckextendsDuck 30. 31. publicRubberDuck() 32. flyBehavior.=newFlyNoWay(); 33. quackBehavior.=newSqueak(); 34. 35. 36. publicvoiddisplay() 37. System.out.println(橡皮鸭); 38. 39. 40. /模型鸭 41. publicclassModelDuckextendsDuck 42. publicModelDuck() 43. flyBehavior.=newFlyNoWay(); 44. quackBehavior.=newQuack(); 45. 46. 47. publicvoiddisplay() 48. System.out.println(模型鸭); 49. 50. 51. 复制打印1. /野鸭 2. publicclassMallardDuckextendsDuck 3. 4. publicMallardDuck() 5. 6. quackBehavior.=newQuack(); 7. flyBehavior.=newFlyWithWings(); 8. 9. 10. 11. 12. publicvoiddisplay() 13. System.out.println(绿头鸭); 14. 15. 16. /红头鸭 17. publicclassRedHeadDuckextendsDuck 18. 19. publicRedHeadDuck() 20. flyBehavior.=newFlyWithWings(); 21. quackBehavior.=newQuack(); 22. 23. 24. publicvoiddisplay() 25. System.out.println(红头鸭); 26. 27. 28. /橡皮鸭 29. publicclassRubberDuckextendsDuck 30. 31. publicRubberDuck() 32. flyBehavior.=newFlyNoWay(); 33. quackBehavior.=newSqueak(); 34. 35. 36. publicvoiddisplay() 37. System.out.println(橡皮鸭); 38. 39. 40. /模型鸭 41. publicclassModelDuckextendsDuck 42. publicModelDuck() 43. flyBehavior.=newFlyNoWay(); 44. quackBehavior.=newQuack(); 45. 46. 47. publicvoiddisplay() 48. System.out.println(模型鸭); 49. 50. / 野鸭 public class MallardDuck extends Duck public MallardDuck() quackBehavior. = new Quack(); flyBehavior. = new FlyWithWings(); public void display() System.out.println(绿头鸭); / 红头鸭 public class RedHeadDuck extends Duck public RedHeadDuck() flyBehavior. = new FlyWithWings(); quackBehavior. = new Quack(); public void display() System.out.println(红头鸭); / 橡皮鸭 public class RubberDuck extends Duck public RubberDuck() flyBehavior. = new FlyNoWay(); quackBehavior. = new Squeak
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB23T 3431-2023 羊草和草木樨混播改良盐碱化草原技术规程
- 2025年代数期末考试试题及答案
- 2025年古筝四级考试试题及答案
- 2025年定州体育面试真题及答案
- 字词辨析中考真题及答案
- 【译林高二下】安徽省黄山市2019-2022学年高二下学期英语期末试卷汇编:应用文写作专题
- 【外研高一下】黑龙江省齐齐哈尔市2019-2022学年高一下学期英语期末试卷汇编:完形填空
- 2024-2025学年天津市部分区七年级(上)期末历史试卷(含答案)
- 2025-2026学年山东省日照市日照经济技术开发区日照神州天立高级中学高二上学期9月月考数学试卷(含答案)
- 企业出售股份合同范本
- 2025年化学检验工(高级技师)职业技能鉴定真题试卷(附答案)
- 接地线安全培训内容课件
- 供水二次加压设备配置方案
- 2025年上海市住宅房屋租赁合同示范文本
- 农村夜晚昆虫课件
- 2025至2030有机复合肥产业市场深度分析及发展趋势与行业项目调研及市场前景预测评估报告
- (2025年标准)投资清退结清协议书
- 插花艺术劳动课课件
- 四川凯亚达新材料科技有限公司新建光电材料项目环评报告
- 临床医学新生成长路径指南
- 2025秋部编版二年级上册语文教学计划+教学进度表
评论
0/150
提交评论