纵有疾风起
人生不言弃

设计模式——策略模式

定义

定义算法族,分别封装起来,让他们之间可以互相替换,此模式让 算法的吧变化独立于使用算法的客户

UML

设计模式——策略模式插图

参考代码

#Character

package designmodel;public abstract class Character {    WeaponBehavior weaponBehavior;    public void setWeaponBehavior(WeaponBehavior weaponBehavior) {        this.weaponBehavior = weaponBehavior;    }    public void showWeapon() {        weaponBehavior.useWeapon();    }    public abstract void fight();}

#King

package designmodel;public class King extends Character{    public King() {        this.weaponBehavior = new SwordBehavior();    }    @Override    public void fight() {        System.out.println("King fight");    }}

#Queen

package designmodel;public class Queen extends Character{    public Queen() {        this.weaponBehavior = new KnifeBehavior();    }    @Override    public void fight() {        System.out.println("Queen fight");    }}

#Knight

package designmodel;public class Knight extends Character{    public Knight() {        weaponBehavior = new BowAndArrowBehavior();    }    @Override    public void fight() {        System.out.println("Knigh fight");    }}

 

#WeaponBehavior

package designmodel;public interface WeaponBehavior {    public void useWeapon();}

#AxeBehavior

package designmodel;public class AxeBehavior implements WeaponBehavior{    @Override    public void useWeapon() {        System.out.println("使用斧子砍劈");    }}

#BowANdArrowBehavior

package designmodel;public class BowAndArrowBehavior implements WeaponBehavior{    @Override    public void useWeapon() {        System.out.println("使用弓箭射击");    }}

#KnifeBehavior

package designmodel;public class KnifeBehavior implements WeaponBehavior{    @Override    public void useWeapon() {        System.out.println("使用匕首刺杀");    }}

#SwordBehavior

package designmodel;public class SwordBehavior implements WeaponBehavior{    @Override    public void useWeapon() {        System.out.println("使用宝剑挥舞");    }}

 

自测

package designmodel;public class Main {    public static void main(String[] args) {        Character queue = new Queen();        queue.showWeapon();        queue.setWeaponBehavior(new AxeBehavior());        queue.showWeapon();    }}

结果

使用匕首刺杀使用斧子砍劈  

 

使用到的三个设计原则

找出应用中可能需要变化的部分,把它们独立出来,不要和不需要变化的代码混在一起(本利中使用武器不同,单独出来)
针对接口编程,而不是针对实现编程(绑的太死不容易修改)

多用组合,少用继承

 

文章转载于:https://www.cnblogs.com/kaituorensheng/p/11107009.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 设计模式——策略模式
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录