Java策略者模式

来源:互联网 发布:网络通信基础知识 编辑:程序博客网 时间:2024/05/22 17:09
package second;/* * 策略模式: * 1.定义: * 属于对象的行为模式。其意是针对一组算法,将每一个算法分装到有公共接口的独立类中,从而使他们可以互相替代。 * 策略算法可以不影响客户端的情况下发生变化 * 2.解决问题: *  让对象和算法分离,由用户决定使用那种类对象 * 3.组成: *   环境类:用提供的不同类来传入 并且使用同一方法调用特有类的方法 *   抽象策略类:传入对象的公共接口 让所有类继承这个接口 用接口类型传入不同对象  *   具体策略类:定义具体类并继承抽象策略类实现具体方法 * 4.适用情况: *  仅仅是类的行为有差别时 *  需要使用一个算法的不同变体 *  算法使用客户不应该知道的数据 *  一个类定义的多种行为类操作以switch case结构或者if else实现 *  *  * *///抽象策略类     地图查找接口interface Map{    public void getSP();}/*三个功能不同的类*///中国地图class ChinaMap implements Map{    public void getSP(){        System.out.println("ChinaMap");     }}//法国地图class FrenchMap implements Map{    public void getSP(){        System.out.println("FrenchMap");     }}//美国地图class AmericanMap implements Map{    public void getSP(){        System.out.println("AmericanMap");     }}//环境类class SreachMap{    //私有接口类型的变量    private Map map;    //创建构造函数 传入用户创建的对象    public SreachMap(Map map){        this.map=map;    }    //外部接口 设置对象    public void setMap(Map map){        this.map = map;    }    //对象操作 用同一方法执行不同内容     public void getMap(){        this.map.getSP();    }}public class Strategy {    public static void main(String args[]){        //搜索中国地图---在搜索地图类中用户创建 想要的 中国对象        SreachMap searchmap = new SreachMap(new ChinaMap() );        //输出中国特性        searchmap.getMap();        SreachMap searchmap1 = new SreachMap(new AmericanMap());        searchmap1.getMap();        searchmap1.setMap(new FrenchMap());        searchmap1.getMap();        //SreachMap s = null ;        //s.setMap(new FrenchMap());    }}/* * 结果: *  ChinaMap    AmericanMap    FrenchMap*/
原创粉丝点击