设计模式之策略模式

来源:互联网 发布:iapp免杀源码 编辑:程序博客网 时间:2024/06/08 11:24

首先我们来看下策略模式的类图(设计模式的类图代表着设计思想)

策略模式 : 策略模式定义了算法家族,分别封装起来,让它们直接之间可以相互替换,此模式让算法的变化独立于使用算法的客户.

这里写图片描述

Context上下文,用具体的方法来进行配置,维护一个Strategy对象的引用.

package sjms.strategy.study;public class Context {    private Strategy strategy;    public void setStrategy(Strategy strategy) {        this.strategy = strategy;    }    public void excute(){        strategy.algorithm();    }}package sjms.strategy.study;public abstract class Strategy {    //算法    public abstract void algorithm();}package sjms.strategy.study;public class ContreteStrategyA extends Strategy {    @Override    public void algorithm() {        // 具体算法        System.out.println("ContreteStrategyA实现");    }}package sjms.strategy.study;public class ContreteStrategyB extends Strategy {    @Override    public void algorithm() {        // 具体算法        System.out.println("ContreteStrategyB实现");    }}package sjms.strategy.study;public class TestStrategy {    public static void main(String[] args) {        Context context = new Context();        context.setStrategy(new ContreteStrategyA());        context.excute();    }}

实际开发中如何决定是否要用策略模式呢?

1:许多相关的类有不同的行为,也就是说所有的算法都是完成相同的工作只是实现不同.
2:进行解耦(减少各个算法之间的耦合)
3:封装了变化,对客户隐藏了策略的实现.

下面我们来走进实际的应用中
像我们玩游戏的时候都会有一些活动,类似充值100的100个元宝,另外多赠送50个元宝之类的活动

package sjms.strategy.exercise;public class CashMoney {    private RechargeMoney rechargeMoney;    public void setRechargeMoney(RechargeMoney rechargeMoney) {        this.rechargeMoney = rechargeMoney;    }    public void cash() {        rechargeMoney.recharge();    }}public interface RechargeMoney {    //充值Recharge    void recharge();}package sjms.strategy.exercise;public class RechargeFifty implements RechargeMoney {    @Override    public void recharge() {        System.out.println("充值50返70个元宝!");    }}package sjms.strategy.exercise;public class RechargeOneHundred implements RechargeMoney {    @Override    public void recharge() {        System.out.println("充值一百返150个元宝!");    }}package sjms.strategy.exercise;public class TestRechage {    public static void main(String[] args) {        CashMoney cashMoney = new CashMoney();        RechargeMoney rechargeMoney = new RechargeOneHundred();        cashMoney.setRechargeMoney(rechargeMoney);        cashMoney.cash();    }}
原创粉丝点击