首页 > 学院 > 开发设计 > 正文

策略模式(Strategy)简介

2019-11-14 23:24:00
字体:
来源:转载
供稿:网友
策略模式(Strategy)简介一、策略模式(Strategy)简介

策略模式是行为模式.

行为模式:规定了各个对象应该具备的职责以及对象间的通信模式,它很好的规范了对象间调用和数据传递方式

策略模式适合于算法经常变化的情况

算法的变化不会影响到使用算法的客户,算法可以独立于使用它的客户所变化

二、简单例子

普通客户,会员,Vip会员购买商品价格不一样

抽象类

package strategy;/* * 计算商品价格的抽象类 */public abstract class Account {abstract public double getPRice(int amount,double d);    }

普通

package strategy;/** * 普通客户商品价格计算 */public class CommonAccount extends Account {    @Override    public double getPrice(int amount, double price) {        return amount*price;    }}

会员

package strategy;/** * 普通会员商品价格计算打9折 */public class InsiderAccount extends Account {    @Override    public double getPrice(int amount, double price) {        return amount*price*9/10;    }}

VIP

package strategy;/** * VIP会员商品价格计算打8折 */public class VipAccount extends Account {    @Override    public double getPrice(int amount, double price) {            return amount*price*8/10;    }}

上下文类

package strategy;/** * 此类用于维护策略类的引用 */public class Context {    //引用    private Account account;    //初始化    public Context(Account account){        this.account=account;    }    //调用计算方法    public double doAccount(int amount, double d){        return account.getPrice(amount, d);    }    }

测试类

package strategy;/** * 此策略模式测试类 */public class Test {    public static void main(String[] args) {        // 声明商品        String name = "DVD";        int amount = 2;        double price = 50;        double sum = 0;        // 声明对象        // 普通客户        Context context = new Context(new CommonAccount());        sum = context.doAccount(amount, price);        System.out.println("普通客户:没有折扣,购买的商品名称:    " + name + "       数量:   "                + amount + "      单价:" + price + "      应付金额:" + sum);        // 普通会员        context = new Context(new InsiderAccount());        sum = context.doAccount(amount, price);        System.out.println("普通会员:9折优惠,购买的商品名称:    " + name + "       数量:   "                + amount + "      单价:" + price + "      应付金额:" + sum);        // VIP        context = new Context(new VipAccount());        sum = context.doAccount(amount, price);        System.out.println("VIP客户:8折优惠,购买的商品名称:    " + name + "       数量:   "                + amount + "      单价:" + price + "      应付金额:" + sum);    }}

结果:

普通客户:没有折扣,购买的商品名称:    DVD       数量:   2      单价:50.0      应付金额:100.0普通会员:9折优惠,购买的商品名称:    DVD       数量:   2      单价:50.0      应付金额:90.0VIP客户:8折优惠,购买的商品名称:    DVD       数量:   2      单价:50.0      应付金额:80.0


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表