策略模式小例子

作者 Lin Wait For Li 日期 2017-02-21
策略模式小例子

今天复习了Android源码设计模式的策略模式,突然想自己写个例子加深自己往后的印象,下面的例子我借助复仇者联盟角色里面形象表达策略模式思想,如有错漏请原谅我的疏忽。

创建共同属性接口(Hero接口)

  1. 创建该接口是因为复仇者联盟里每个英雄虽有不同技能(方法中的具体表达),但是技能归结起来都属于动作(接口的方法),都属于英雄(接口)一类人物
    代码如下:
    public interface Hero {
    void action();
    }

创建具体的复仇者联盟角色

  1. 为了能将各自角色独立开,每个角色需要分别实现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,"雷神之锤");
}
}

创建神盾局

  1. 为了方便英雄管理,英雄们必须聚集在一起。(方便调用)
    代码如下:
    public class ManagerHero {
    private Hero myHero;
    public void selectHero(Hero myHero){
    this.myHero = myHero;
    }
    public void actionHero(){
    myHero.action();
    }
    }

呼叫英雄们

  1. 人们遇难时候,只需要给神盾局信息便可以迎来你心目中的英雄了。不需要一个一个英雄去联系。
    代码如下:
    ManagerHero myHero = new ManagerHero();
    myHero.selectHero(new CaptainHero());//选择美国队长
    myHero.actionHero();//美国队长去打架

策略模式好处

  1. 每当某个英雄的技能发生改变时候,不需要一个一个去修改,只需要修改当对应英雄类的技能(修改类的action方法里面的具体操作)便可以,从而节省时间。
  2. 每个英雄都是通过神盾局产生联系的,他们之间耦合度比较低,所以导致复仇者联盟二中美队退出了神盾局(玩笑话)。主要是解除类与类之间的耦合度。
  3. 透明化。用户不需要知道怎么去寻找英雄,只需要给信息给神盾局,英雄们便会过来拯救世界。
  4. 冗余度低。少了重复的具体技能代码。

参考文献:Android源码设计模式