定义:策略模式定义了一个算法家族,并分别把它们封装成单独的类,这些算法类之间可以自由切换,而与客户端的调用无关,使用到的原则:开放--封闭原则,多用组合少用继承。
一般的组成部分:
1.抽象策略类:封装了所有要使用的算法等操作,共同点是这些操作在使用过程中很容易变化
2.具体的策略类:继承了抽象策略类,分别实现相应的算法等操作,实际的算法部分
3.上下文调控类:依赖于抽象策略类,产生具体的策略类,并实现相应的操作
代码解析:
1.定义抽象策略类:
public interface Icalcute{
//公共的算法接口
public double calcuteresutl();
}
2.具体策略类实现了抽象策略接口
//车型为car
public class car:Icalcute{
public double calcuteresult()
{
return 33;
}
}
//车型为bus
public class bus:Icalcute{
public double calcuteresult()
{
return 100;
}
}
........可以有多个车型类
3.上下文调控类,根据不同的条件做相应的操作
public calss context{
Icaltute cal;
//这一部分可以换成简单工厂模式中的switch函数,这样更灵活
public context(Icaltute one)
{
cal=one;
}
public double Getcalcuteresult()
{
return cal.calcuteresult();
}
客户端代码
public void main()
{
//车型car
context con=new context(new car());
double fee=con.Getcalcuteresult();
//车型bus
context con=new context(new bus());
double fee=con.Getcalcuteresult();
}
与简单工厂模式的区别:
可以把生成对象的逻辑,放到具体的客户端来处理,让用户自己处理,在客户端减去了与具体类型的依赖关系