定义

定义算法族,分别封装起来,让它们之间可以互相替换,使算法的变化独立于使用算法的客户

Duck 鸭子项目

利用继承提供Duck行为

代码在多个子类重复
运行时行为不易改变
难知道鸭子的全部行为
改变会牵一发动全身,造成其他鸭子不想要的改变

利用接口设计Duck行为

代码无法复用

软件开发不变真理

change
顾客需要新的功能、公司决定采用别的数据库产品等

设计原则—封装变化

找出应用中可能需要变化之处,把它们独立出来。
Duck类中的fly/quack会随着鸭子的不同而改变。
将这两个行为抽取出来,建立一组新类代表每个行为

设计原则—针对接口编程

不针对实现编程,
将鸭子的行为放在分开的类中,此类专门提供某行为接口的实现,鸭子类不需要知道行为的实现细节

抽象超类型可以是抽象类或接口

关键点—委托

将飞行和叫的动作委托给别人处理,不是使用定义在Duck类内的飞行和叫的方法。

设计原则—多用组合

少用继承
鸭子的行为不是继承来的,而是和适当的行为对象组合来的。

源码

(spring-第10回【IoC基础篇】)InstantiationStrategy—实例化Bean的第三大利器

https://www.cnblogs.com/mesopotamia/p/4990428.html

head first--5 策略模式 - 图1

head first--5 策略模式 - 图2

spring源码之Resource之策略模式

https://www.jianshu.com/p/55f42d68576a

image.png

image.png