策略模式:
策略模式主要有两个角色:(具体)策略(concrete strategy)和上下文(context),外加一些接口(因为要针对接口编程),如抽象策略。
具体策略实现于同一种抽象策略,接口都是一致的。比如排序有冒泡、快排、桶排等等具体策略,但是接口都是输入一个乱序数组,输出一个完成排序的数组。
上下文利用算法功能,实现自己的特定业务。比如上下文利用排序的功能,业务是给倒数三名的同学学业警告(bushi......),算法细节上下文就管不着了。
类图:
伪码:
落实到主函数调用时,创建好自己的业务类(上下文)后,只要选择一个自己 合适的策略算法,填入上下文就行了,不用再把策略算法写死在上下文里面了。
策略模式的理解:
不同的算法适合的业务是不同的;有些业务是错综复杂的,还可能会需要用到多种不同的算法组合使用。 如要灵活应对这些情况,可把具体的算法统一好策略接口(抽象策略),按照不同的具体策略封装;上下文(指代特定业务)直接访问统一的策略接口,不用考虑自己要用什么算法,到时候依赖注入(选一个策略填进来)就完事儿了。