设计模式-策略模式

emmm.. 什么叫策略模式呢? 我接下会来通过吃鸡的武器来给大家讲解,以便于大家理解什么是策略模式

策略模式的定义

策略模式是一种面向接口编程,让每一个接口互相没有关联,却可以互相替换。也可以相当于说一种行为与算法

UML类图

enter image description here
  • Arsenat 上下文类,用来实现与替换策略(相当于Android中常用的BaseActivity)
  • Weapon 策略的抽象类
  • WeaponM16A4,WeaponM416 抽象的具体事例类

具体代码实现

在我们吃鸡的时候,我们跳伞之后会拾取到很多武器,这些武器有一个共同的特点就是 都能开枪射击(shoot),但是我们角色(Arsenat)有时候一局游戏中可能会更换(setWeapon)很多种武器, 但是开枪一个特征所有武器都是持有的. 从策略模式的角度来分析的话,我们更换武器 只需更换武器的引用,这就是上面所说面向接口编程 会降低耦合 方便之后扩展

策略抽象Weapon

public interface Weapon {
    /**
     * 射击
     */
    void shoot();
}

策略实例WeaponXXX

public class WeaponAKM implements Weapon {
    @Override
    public void shoot() {
        System.out.println("AKM 击杀了 xxx");
    }
}

public class WeaponM16A4 implements Weapon {
    @Override
    public void shoot() {
        System.out.println("M16A4 击杀了 xxx");
    }
}

Arsenat

 public class Arsenat {

    private Weapon mWeapon;

    public Arsenat(Weapon mWeapon) {
        this.mWeapon = mWeapon;
    }

    public void setWeapon(Weapon weapon) {
        mWeapon = weapon;
    }


    public void action() {
        mWeapon.shoot();
    }
}

运行

public static void main(String[] args) {
        Arsenat arsenat = new Arsenat(new WeaponAKM());
        //击杀
        arsenat.action();
        //舔包 换武器
        arsenat.setWeapon(new WeaponM16A4());
        arsenat.action();
        }

 //Log

AKM 击杀了 xxx
M16A4 击杀了 xxx

总结

通过简单的代码实例,我们基本能够理解什么是策略模式,代码虽然非常简单,但是设计模式是一种思想,我们要学会如果运用这种思想到平常的编码提高我们的设计和架构能力。

策略模式
优点: 对于较为复杂的业务逻辑显得更为直观,扩展也更为方便
缺点: 如果策略过多,子类相对就回比较臃肿,如果需要大量子类,谨慎使用

Demo地址

参考资料

Android设计模式源码解析之策略模式

Head First 设计模式

你可能感兴趣的:(设计模式-策略模式)