设计模式之策略模式

上一次写到简单工厂模式和静态工厂模式,但是创建的东西时根据一定的条件去创建,比如:我要做一个超市的管理系统,根据要求,超市里面可以根据满一百块减去5元这样的营销模式,也可以是遇到圣诞或者什么节日,全场九折这样的,那按照之前的简单工厂去写的话可以,但是超市要修改条件—-我现在要买打九五折,那就创建一个具体类,在工厂里面去添加创建新的具体类。这样会有一定的缺陷,再去修改已经写好的程序,那就可能出现新的bug.所以现在要讲策略模式。

策略模式的UML图
策略模式uml图

/**
 * 抽象类,价值类
 * @author CJB
 *
 */
public abstract class Worth {
    /**
     * 支付多少钱
     * @param value 全部的价格
     */
    public abstract void price(double value);
}

/**
 * 这是一个打九折的类
 * @author CJB
 *
 */
public class NinethPer extends Worth {

    @Override
    public void price(double value) {
        // TODO Auto-generated method stub
        System.out.println("原来的价格:"+value);
        System.out.println("现在是打了九折后的价格:"+value*0.9);
    }

}
/**
 * 满一百减5块的类
 * @author CJB
 *
 */
public class ConformDecrease extends Worth {


    @Override
    public void price(double value) {
        // TODO Auto-generated method stub
        System.out.println("原来的价格:"+value);
        if(value>=100)
        System.out.println("现在是满一百减五块后的价格:"+(value-5));
    }

}

/**
 * 管理类
 * @author CJB
 *
 */
public class ContextTo {
    private Worth worth;
    public ContextTo(Worth worth){
        this.worth=worth;
    }
    public void execute(double value){
        worth.price(value);
    }
}

/**
 * 测试类
 * @author CJB
 *
 */
public class Testdemo11 {
    @Test
    public void test(){
        //假如你买的东西够了一百块钱,正好超市搞活动,满一百减5块
        ContextTo contextTo=new ContextTo(new ConformDecrease());
        contextTo.execute(100);
        //假如你买的东西够了一百块钱,正好超市搞活动,打九折
        ContextTo contextTo1=new ContextTo(new NinethPer());
        contextTo1.execute(100);
    }
}

大家好好体会一下策略模式的特别点,那策略模式就到此了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值