定义
定义算法族,分别封装起来,让它们之间可以互相替换,使算法的变化独立于使用算法的客户
Duck 鸭子项目
利用继承提供Duck行为
代码在多个子类重复
运行时行为不易改变
难知道鸭子的全部行为
改变会牵一发动全身,造成其他鸭子不想要的改变
利用接口设计Duck行为
代码无法复用
软件开发不变真理
change
顾客需要新的功能、公司决定采用别的数据库产品等
设计原则—封装变化
找出应用中可能需要变化之处,把它们独立出来。
Duck类中的fly/quack会随着鸭子的不同而改变。
将这两个行为抽取出来,建立一组新类代表每个行为
设计原则—针对接口编程
不针对实现编程,
将鸭子的行为放在分开的类中,此类专门提供某行为接口的实现,鸭子类不需要知道行为的实现细节
抽象超类型可以是抽象类或接口
关键点—委托
将飞行和叫的动作委托给别人处理,不是使用定义在Duck类内的飞行和叫的方法。
设计原则—多用组合
少用继承
鸭子的行为不是继承来的,而是和适当的行为对象组合来的。
源码
(spring-第10回【IoC基础篇】)InstantiationStrategy—实例化Bean的第三大利器
https://www.cnblogs.com/mesopotamia/p/4990428.html


spring源码之Resource之策略模式
https://www.jianshu.com/p/55f42d68576a


