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
*/
Java策略者模式
最新推荐文章于 2025-04-10 11:49:02 发布