设计模式——策略模式(Strategy)

首先说说继承带来的问题

1.父类定义的方法过少

(PS:父类中有方法A,而子类也有方法A,表示子类要重写继承自父类的方法A,子类没有方法A,则表示直接使用继承自父类的方法A)

高达A,高达B,…,高达N都有开枪操作,而且其中的实现都是一样的,但是由于父类没有这样的方法

则所有用到这些方法的子类都得重新实现一边,如果涉及到修改的话,还得修改很多个地方

 

2.父类定义的方法过多


小狗机器人、小猫机器人的开枪的方法就多余了

(最根本的原因是因为:你无法保证父类定义的方法是否能满足以后子类的需求,未来总是不可预见的 :()

那么试试抽出枪类的接口?


从上面可以看到,即使抽象出相应的接口,还是得在高达1、高达2、…、高达n中重复地实现开枪的方法,这样还是没有解决问题

如果要修改开枪的方法,还是得在高达A,B...N上一个个地修改...囧


(PS:高达中的开枪方法只需要调用枪类接口中的子类,即手枪 或 机关枪中的开枪方法就可以了,具体的开枪实现在 手枪,机关枪类中)

但是再看看这幅图,这样就避免了代码重复实现的问题,如果哪天手枪的攻击效果统一升级了,那么只需要修改手枪这个类,那么所有用到手枪的高达都集体升级了!


从上述问题我们可以看到几个设计原则:

1.应用中可能需要变化的地方,把它们独立出来,不要和那些不需要变化的代码混在一起

上图中,机器人的类是肯定有走路、跑步的动作的,我们把这些行为当做是不太可能需要变化的部分,而枪类的攻击行为则是有的机器人有,有的没有,这些就是可能变化的部分,因此我们将可能变化的部分的实现抽离出来,这样可以避免在修改变化部分的时候,去修改已经稳定的代码

2.面向接口编程,而不是针对实现编程

这个的好处我就不再多说了

3.类应该对扩展开放,对修改封闭

意思就是良好设计的类,当需求产生变化时,只需要添加新的代码即可满足需求,而不需要修改现有的代码,这个原则和前面的可以联合在一起理解

4.多用组合,少用继承

在机器人的类中包含枪类接口的属性,这样的方式就叫做组合,具体的好处就自己看看上面的图示吧 :-)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值