今天复习了Android源码设计模式的策略模式,突然想自己写个例子加深自己往后的印象,下面的例子我借助复仇者联盟角色里面形象表达策略模式思想,如有错漏请原谅我的疏忽。
创建共同属性接口(Hero接口)
- 创建该接口是因为复仇者联盟里每个英雄虽有不同技能(方法中的具体表达),但是技能归结起来都属于动作(接口的方法),都属于英雄(接口)一类人物
代码如下:public interface Hero {void action();}
创建具体的复仇者联盟角色
- 为了能将各自角色独立开,每个角色需要分别实现Hero接口(实现独立)
创建美国队长
代码如下:public class CaptainHero implements Hero{ @Override public void action() { //美国队长的具体技能 Log.i(TAG,"无敌之盾"); }}
创建绿巨人
代码如下:public class HulkHero implements Hero { @Override public void action() { //绿巨人的具体技能 Log.i(TAG,"浩克之力"); }}
创建雷神
代码如下:public class ThorHero implements Hero { @Override public void action() { //雷神的具体技能 Log.i(TAG,"雷神之锤"); }}
创建神盾局
- 为了方便英雄管理,英雄们必须聚集在一起。(方便调用)
代码如下:public class ManagerHero {private Hero myHero;public void selectHero(Hero myHero){this.myHero = myHero;}public void actionHero(){myHero.action();}}
呼叫英雄们
- 人们遇难时候,只需要给神盾局信息便可以迎来你心目中的英雄了。不需要一个一个英雄去联系。
代码如下:ManagerHero myHero = new ManagerHero();myHero.selectHero(new CaptainHero());//选择美国队长myHero.actionHero();//美国队长去打架
策略模式好处
- 每当某个英雄的技能发生改变时候,不需要一个一个去修改,只需要修改当对应英雄类的技能(修改类的action方法里面的具体操作)便可以,从而节省时间。
- 每个英雄都是通过神盾局产生联系的,他们之间耦合度比较低,所以导致复仇者联盟二中美队退出了神盾局(玩笑话)。主要是解除类与类之间的耦合度。
- 透明化。用户不需要知道怎么去寻找英雄,只需要给信息给神盾局,英雄们便会过来拯救世界。
- 冗余度低。少了重复的具体技能代码。
参考文献:Android源码设计模式