赞
踩
1、代码写的多了,就知道一开始,我们其实就应该确定好最终的目标,然后进行各小功能的切片。
2、在编码的时候,应该养成提前做一些预判和设计的习惯。
3、
a. 封装:隐藏内部实现
b. 继承:复用现有代码
c. 多态:改写对象行为
a. 结构话的思维->分解:分而治之
b. 面向对象的思维->抽象:忽视细节,泛化和理想化对象模型
a. 理解隔离变化
b. 各司其职: 各类各负责
c. 对象是什么?
- 高层模块(稳定) 不应该依赖于低层模块(变化),二者都应依赖于抽象。
- 抽象(稳定)不应该依赖于实现细节。实现细节应该依赖于抽象。
- 上面讲的依赖都是:编译式依赖。
- 对扩展开放,对更改封闭
- 类模块应该是可扩展的,但是不可修改。
第二,从功能上看,代理模式侧重的是“控制”,而装饰器模式侧重的是“扩展”。比如说,类A代理了类B,那么这两个类由于同一个接口的约束,它们的方法和实现的功能其实是一样的。而类C装饰了类D,那么这个时候类C不仅仅具备了类D的方法,同时还能加入自己的特殊逻辑。
代码在这里:Github地址
状态强调的状态的不同,状态不同,要做的事情不同(开心->买肯德基犒劳犒劳自己,不开心->明天请假不上班),聚焦在开心或者不开心上,而开心或者不开心具体要做什么不关心,你不开心明天辞职也可以
策略强调要做的事情不同会导致做事情的具体步骤不同,强调的是“做的步骤”,即行为、算法本身
总结:
1、Strategy 及其子类为组件提供了一系列可重用的算法,从而使得算法在运行时,方便的根据需要在各个算法之间进行切换。
2、 Strategy 提供了用条件判断语句以外的另一种选择,就是在消除条件判断语句,在消除解耦合。含有许多条件判断语句的代码通常都需要策略模式。
3、如果Strategy对象没有实例变量,那么各个上下文可以共享同一个Strategy对象,从而节省对象 开销。
if else 其实是一种分支模式。比如只有一定要固定的情况,那么就可以用if else。
缓解性能问题。
用扩展的思想去面对这种变化。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。