前言
这周保持每天一篇设计模式的节奏,go on!
策略模式
基本结构
stragetycontext: 对策略的进行封装,使调用者不用关心策略内部的具体信息,只用专注于策略的选择
public class StragetyContext {
private AbstractStragety mAbstractStragety;
public StragetyContext(AbstractStragety abstractStragety) {
mAbstractStragety = abstractStragety;
}
public void buyPhone(){
mAbstractStragety.buyPhone();
}
}
abstractstragety: 策略的抽象类,对拥有统一行为的对象的抽象,定义统一行为
public abstract class AbstractStragety {
public abstract void buyPhone();
}
concretestragety: 策略的具体实现类
public class AndroidStragety extends AbstractStragety {
@Override
public void buyPhone() {
System.out.println("购买Android手机");
}
}
public class IOSStragety extends AbstractStragety {
@Override
public void buyPhone() {
System.out.println("购买苹果手机");
}
}
public class WPStragety extends AbstractStragety {
@Override
public void buyPhone() {
System.out.println("购买WP手机");
}
}
main方法调用:
//策略模式测试方法
private static void testStragety(){
AndroidStragety androidStragety=new AndroidStragety();
StragetyContext stragetyContextOne=new StragetyContext(androidStragety);
stragetyContextOne.buyPhone();
IOSStragety iosStragety=new IOSStragety();
StragetyContext stragetyContextTwo=new StragetyContext(iosStragety);
stragetyContextTwo.buyPhone();
WPStragety wpStragety=new WPStragety();
StragetyContext stragetyContextThree=new StragetyContext(wpStragety);
stragetyContextThree.buyPhone();
}
输出结果:
购买Android手机
购买苹果手机
购买WP手机
个人总结
当调用的方法里存在跟多if/else条件判断的时候,可以将每一个判断整合成一种策略,更加灵活,易于修改,并且可以对上层调用隐藏每一种策略内部的具体实现。