设计模式真解——策略模式篇

策略模式

模式描述:将一个系统的算法封装起来,作为一个独立的可替换的块,不同的对象采用不同的算法块,避免继承的缺点,不必在每个子类一一重载,减少重复代码,增加易维护性,其中算法块完全不依赖于系统,独立存在

现实案例:有些类似于游戏机和游戏卡带,量产游戏机,然后将游戏一个个写进去固然是一个办法,但是这样一来,想要玩三个游戏,就要买三台不同的游戏机,很不方便,于是厂商发明了游戏卡带,要玩《马里奥》就装进去,这台游戏机就是马里奥游戏机,要玩旷野之息就把对应的卡带放进去,就成了另一个游戏的游戏机,当其中某个游戏需要发生改变,比如升级,修复bug,这个时候不需要整个游戏机一起返厂,只需要升级一下卡带就行,需要扩展新的游戏,就创建一个新的游戏卡带,将游戏流程在卡带里实现即可,游戏机本身不用进行任何修改。

    又像电脑中的显卡,如果只能用集成显卡,那么想要有不同倾向性的电脑,就需要创建不同的电脑,因为在电脑创建出来的时候,显卡性能已经固定了,但是如果将显卡独立出来(可以理解为一种渲染处理画面的算法族),当需要组装一台游戏机,选用高档的显卡,当需要一台平民家庭机时,选用普通显卡,需要看高清电影的电脑,装备AMD显卡,需要玩大型3D游戏时,装备英伟达显卡.

    另一个比喻是电路板,通过输入的不同,产生不同的功能,功能具体如何实现(电路细节)封装在电路板中,只要切换到不同的电路就能实现各种功能,比如需要实现计算器,就选用电路板的计算器模块,需要实现一个秒表,就选用电路板的秒表模块,需要实现一个天河一号,就选用电路板的超级计算机模块,电路板就是一个“算法族“

    In My Opinion:在算法中,策略模式是将一段可能会产生较多改动的算法封装起来,构成一个“算法族”,在创建实例的时候,根据实例不同,“装备”不同的“算法“上去,实现不同的功能,比如”车“这个类,都有前进方法,基础的设计是”车“基类带有”前进“方法,然后各类继承,分别去实现,但是实际上每创建一个车,就要重载一次”前进“方法,这是一种针对实现的编程

    用策略模式,将”前进方法“视为一个对象,统一管理,通过传入的”车“类别不同,返回不同的前进方法,比如创建一辆马车,返回”马匹拉动“的前进算法,比如创建一辆兰博基尼,返回”引擎驱动“的前进算法,比如创建一架”风车“,返回”不能动“的前进算法,即使后面给风车安装了一个兰博基尼的底座,还可以通过”前进方法“对象的判断,返回兰博基尼的”引擎驱动“前进算法,如果不使用策略模式,修改已经创建好的风车就很麻烦了,同时,创建一百辆马车,也不用实现一百次”马匹拉动“的前进算法,策略模式是一种针对接口的编程

猜你喜欢

转载自blog.csdn.net/weixin_39633215/article/details/80138905
今日推荐