设计模式----策略模式

策略模式:策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。如某一网站针对不同的等级的用户实行不同的打折策略。

策略模式:

  • 定义了一组算法(业务规则);

  • 封装了每个算法;

  • 这组算法可互换代替(interchangeable)

//定义一个打折的策略接口
public interface DiscountStrategy {
    double discount(double money);
}
//定义一个超级会员实现打折策略的接口
public class Svip implements DiscountStrategy{
    private double rebate;

    public Svip(double rebate){
        this.rebate=rebate;
    }
    @Override
    public double discount(double money) {
        return money * rebate;
    }
}
//定义一个会员实现打折策略接口
public class Vip implements DiscountStrategy {
    private double rebate;

    public Vip(double rebate) {
        this.rebate = rebate;
    }
    @Override
    public double discount(double money) {
        return money * rebate;
    }
}
//定义一个普通用户实现打折策略
public class User implements DiscountStrategy {
    //普通用户不打折
    @Override
    public double discount(double money) {
        return money;
    }
}
//测试
public class Test {
    public static void main(String[] args) {
        StrategyImpl strategyImpl;

        strategyImpl=new StrategyImpl("svip");
        double svip = strategyImpl.discountImpl(1000);
        System.out.println("超级会员的价格"+svip);

        strategyImpl=new StrategyImpl("vip");
        double vip=strategyImpl.discountImpl(1000);
        System.out.println("普通会员的价格"+vip);

        strategyImpl=new StrategyImpl("user");
        double user=strategyImpl.discountImpl(1000);
        System.out.println("普通用户的价格"+user);
    }
}

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。

缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。

策略模式的类图:

设计模式----策略模式_第1张图片

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