经常有人会说,程序员写代码要什么设计模式,随便写就行,这其实是一种很不好的习惯,就好比盖房子,不需要设计图随便盖就可以,但是想要盖成高楼大厦,一定要经过严谨的设计,不然就容易崩塌。我们采用设计模式来写代码,更多的,是为了不坑自己。
![93329236c06f42fa6c20a7f82d95e90b.png](https://i-blog.csdnimg.cn/blog_migrate/21a5681e4aa16fece44669bb085b0714.jpeg)
今天我们来讲一个经典的设计模式,策略模式。
举个简单的例子,我们玩RPG游戏中,玩家都有各式各样的武器,每个武器攻击的动画效果都不一样,如果我们使用简单的方式来做,可以写很多个if或者switch之类的语句,判断当前的武器是否是斧头,那么进行挥砍,判断当前的武器是否是长枪,那么刺向敌人,或者是弓箭,进行拉弓操作。并且,有些武器可能还有必杀技,又是一套很多个不同的if语句。
而策略模式,正是为了解决上述问题,策略模式,定义了算法族,并且算法之间可以互相替换。这个设计模式的好处,在于算法的变更独立于使用算法的人。可能听起来比较拗口,上述游戏设计的例子例子中,使用不同的武器,就是不同的算法,如果我们新增一个新的武器,只要新增新的算法,而去掉一个武器,只要删除旧的算法。
![9c23be3885709b11f5d5f240717d764f.png](https://i-blog.csdnimg.cn/blog_migrate/c957f056b1e159346f51db8ee10166b7.jpeg)
可能有人会问,这种设计的好处是什么呢?明明多写几个if的事情,为什么要设计得如此复杂。首先,在游戏中,除了主角之外,还有很多不同的角色跟怪物,他们也有可能可以使用多种武器,那么同样的代码要出现非常多次,非常的冗余,而在软件设计中,代码冗余的危害是非常大的,举个简单的例子,新增一个武器,就要涉及到非常多处的代码,稍有不慎,就可能会改漏,带来故障。
![8cb894276ae0caa7bc9128e87843c869.png](https://i-blog.csdnimg.cn/blog_migrate/fd945a7f9d8a46f2e9b5d1f2292c333d.jpeg)
这个是上述例子画出来的类图,这种设计模式有什么好处呢?假如我们新增了一个新的怪物,怪物B,那么只要继承角色这个类,设置他使用的武器,就可以做出攻击动作了,同样,假如我们新增一个新的武器,例如机械键盘,那么同样只要新建一个机械键盘的类,实现武器的接口即可,当我们实现完之后,原有的主角程序员,只要调用跟换武器为机械键盘,便可以使用机械键盘去攻击了!如果我们不适用设计模式,新增一个机械键盘作为武器,又要增加多少工作量呢!
总结
作为一个程序员,我觉得对写代码应该是有追求的,那样才能够称之为一个合格的工程师,只有这样,我们才能够不停的进步。可能有人会说,这个代码已经这样了,没救了,那是否需要加强思考,找到现有的问题,再下一次设计中去解决呢?提升效率的同时又提高了自己的能力!
好了,今天我们就介绍到这里,再次祝大家中秋快乐。欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)