策略设计模式

模式定义
策略模式定义了一系列算法,并将每一个算法封装起来,而且是他们之间可以相互切换。

不同理财工具理财率不一样,一般写法

public class FinaceManager {
    public enum Finace{
        ZHI_FU_BAO,PEAKMAIN
    }
    private float zhifubaoFinace(int month,int money){
        if (month == 3) {
            return money + money * 0.047f / 12 * month;
        }
        if (month == 6) {
            return money + money * 0.05f / 12 * month;
        }
        if (month == 12) {
            return money + money * 0.06f / 12 * month;
        }
        throw new IllegalArgumentException("月份不对");
    }
    private float peakmainFinance(int month, int money) {
        if (month == 3) {
            return money + money * 0.09f / 12 * month;
        }
        if (month == 6) {
            return money + money * 0.112f / 12 * month;
        }
        if (month == 12) {
            return money + money * 0.12f / 12 * month;
        }
        throw new IllegalArgumentException("月份不对");
    }
    /**
     * 获取计算的金额
     */
    public float finance(int month,int money,Finace finace){
        switch (finace){
            case ZHI_FU_BAO:
                return zhifubaoFinace(month,money);
            case PEAKMAIN:
                return peakmainFinance(month,money);
            default:
                return 0;
        }
    }
}

测试

public class Client {
    public static void main(String[] args) {
        FinaceManager finaceManager=new FinaceManager();
        float money = finaceManager.finance(3, 9000, FinaceManager.Finace.ZHI_FU_BAO);
        System.out.println(money);

    }
}

策略模式写
IFinaceManager

public interface IFinaceManager  {
    float finace(int month,int money);
}

ZhifubaoFinace

public class ZhifubaoFinace implements IFinaceManager {
    @Override
    public float finace(int month, int money) {
        if (month == 3) {
            return money + money * 0.047f / 12 * month;
        }
        if (month == 6) {
            return money + money * 0.05f / 12 * month;
        }
        if (month == 12) {
            return money + money * 0.06f / 12 * month;
        }
        throw new IllegalArgumentException("月份不对");
    }
}

peakmainFinance

public class peakmainFinance implements IFinaceManager {
    @Override
    public float finace(int month, int money) {
        if (month == 3) {
            return money + money * 0.09f / 12 * month;
        }
        if (month == 6) {
            return money + money * 0.112f / 12 * month;
        }
        if (month == 12) {
            return money + money * 0.12f / 12 * month;
        }
        throw new IllegalArgumentException("月份不对");
    }
}

FinaceContext这个类是多余的,实际开发过程中可以不要

    public class FinaceContext {
    private IFinaceManager mFinace;

    public FinaceContext(IFinaceManager finaceManager) {
        this.mFinace = finaceManager;
    }

    public float finace(int month, int money) {
        return mFinace.finace(month, money);
    }
}

测试

public class Client {
    public static void main(String[] args) {
       IFinaceManager finaceManager=new peakmainFinance();

        FinaceContext context=new FinaceContext(finaceManager);
        float money = context.finace(3, 9000);
        //float money = finaceManager.finace(3, 9000);
        System.out.println(money);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值