设计模式读书笔记--1设计入门 策略模式

设计原则:

1.找出应用可能变化的地方,独立出来

2.针对接口编程,而不是针对实现编程

3.多组合,少继承

举例:



各种鸭子有共同的特性的方法比如游泳,会飞。区别就是外形不一样,红色的,有白色的。。。

  父类:duck    属性方法:swim() fly()       子类扩展:display()


突然有一天,老板说鸭子也有不会飞的,怎么改程序呢?

最简单粗暴的方法是:用继承。

对于不会飞行鸭子的子类,就覆盖fly()方法,什么都不做。


问题来了,

1: 代码重复,假设有多种会倒着飞的鸭子,比如南方倒飞鸭,北方倒飞鸭,就要写很多一样的fly()方法

2:很难知道fly()到底有多少种,因为都用fly这个名字。以后也许会有可以直接起飞的鸭子。

3:运行时的行为不容易改变。比方说大多数一般的鸭子不用覆盖fly()方法,用父类的fly方法(跑着飞),但是以后发明了一种兴奋剂,普通鸭子吃了以后就可以直接起飞了。

但是它的fly方法不可以改变了。哭死了。

4:改变会牵一发动全身。不能轻易改父类的fly()里方法,因为所有鸭子都在复用这个方方法。


改进一下呢:用接口。

把fly做成接口。虽然可以不会飞的鸭子不用实现接口。

问题又来了:

1: fly还是不能复用。

2: 有多种fly,结果名字一样。



变化的部分,分离出来。

把fly分离出来做成类,有多少种fly,就有多少种fly类,都实现了叫fly的接口。
duck添加一个属性:就是一个fly的引用。



封装行为大局观

display是IS-A, 所以用继承。
fly是HAS-A.






                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值