这几天太忙了,都没空写,因此持续了好几天。html
策略模式定义了算法族,分别封装起来,让他们之间能够互相替换,此模式让算法的变化独立于使用算法的客户。python
通俗的讲,也就是将那些使用的方法风别封装成独立的类,而后将这一类使用接口统一管理起来,让须要使用这些方法的用户可以随时调用他们。算法
算法能够自由切换segmentfault
改一下策略很方便设计模式
扩展性良好工具
增长一个策略,就多增长一个类就行了。设计
(被赞美着的每每也就是被绑架着的,有优势必有缺点)htm
策略类的数量增多对象
每个策略都是一个类,复用的可能性很小、类数量增多blog
全部的策略类都须要对外暴露
上层模块必须知道有哪些策略,而后才能决定使用哪个策略
策略模式还有一个Context上下文对象。这对象是用来干什么的呢?
《设计模式之禅》:
Context叫作上下文角色,起承上启下封装做用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。
说白了,经过Person来调用更符合面向对象(屏蔽了直接对具体实现的访问)。
首先要明白一个道理,就是——究竟是 “人” 旅游,仍是火车、汽车、自行车、飞机这些交通工具旅游?
若是没有上下文的话,客户端就必须直接和具体的策略实现进行交互了,尤为是须要提供一些公共功能或者是存储一些状态的时候,会大大增长客户端使用的难度;引入上下文以后,这部分工做能够由上下文来完成,客户端只须要和上下文进行交互就能够了。这样可让策略模式更具备总体性,客户端也更加的简单
https://www.zhihu.com/question/31162942
参考
http://www.imooc.com/article/270302
https://www.cnblogs.com/onepiece-andy/p/python-strategy.html
https://segmentfault.com/a/1190000011918366
https://www.jianshu.com/p/c59d75de1c54
https://www.cnblogs.com/whgk/p/6087064.html