27
2017
09

策略模式

前言

这周保持每天一篇设计模式的节奏,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条件判断的时候,可以将每一个判断整合成一种策略,更加灵活,易于修改,并且可以对上层调用隐藏每一种策略内部的具体实现。

上一篇:View基础知识 下一篇:web-前端之后台管理系统模板首页