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