鸭子Java.doc_第1页
鸭子Java.doc_第2页
鸭子Java.doc_第3页
鸭子Java.doc_第4页
鸭子Java.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论