设计模式(二)(策略)

设计模式

1.策略模式
策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

策略模式的优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点:1、策略类会增多。 2、所有策略类都需要对外暴露。

策略模式涉及到三个角色:

  • 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  • 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
  • 环境(Context)角色:持有一个Strategy的引用。

例如去商店买书,不同会员之间的折扣不同,普通会员不打折,中级会员85折,高级会员6折。

这里MemberStrategy是抽象策略角色。三个实现类是具体策略角色。Price是环境角色。在main方法中,我们需要根据接口实现多态,最终得到价格,示意图代码如下:

在这里插入图片描述

public class StrategyDemo {
    public static void main(String[] args) {
        //选择并创建需使用的策略对象
        MemberStrategy dis=new AdvanceMemberStrategy();
        //环境角色
        Price price=new Price(dis);
        //计算价格
        double realprice=price.quote(300);
        System.out.println("打折后的价格是:"+realprice);
    }
}
//计算打折的价格
interface MemberStrategy {
    /*
    * calPrice是打折后的价格
    * bookPrice是打折前的价格
    */
    double calPrice(double bookPrice);
}
//初级会员原价
class PrimaryMemberStrategy implements MemberStrategy {

    @Override
    public double calPrice(double bookPrice) {
        return bookPrice;
    }
}
//中级会员85折
class IntermediateMemberStrategy implements MemberStrategy {

    @Override
    public double calPrice(double bookPrice) {
        return bookPrice*0.85;
    }
}
//高级会员6折
class AdvanceMemberStrategy implements MemberStrategy {

    @Override
    public double calPrice(double bookPrice) {
        return bookPrice*0.6;
    }
}
//环境角色
class Price{
    private MemberStrategy dis;
    //构造函数
    public Price(MemberStrategy dis) {
        this.dis = dis;
    }
    //计算打折后价格
    public double quote(double bookPrice){
        return this.dis.calPrice(bookPrice);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值