关闭

策略模式--java

460人阅读 评论(0) 收藏 举报
分类:

策略模式:

策略模式是行为对象模式,主要是定义一系列算法,把每个算法封装起来,此模式让算法的变化独立于使用算法的客户。

策略模式体现了两个面向对象编程原则:

1、封装变化的概念

2、编程中使用接口,而不是对接口的实现

策略模式定义一个共同的抽象算法接口,其子类实现这个接口定义的方法,并且都有各自不同的实现,这些算法实现可以再客户端调用它们的时候互不影响的变化。子算法之间是弱连接。

策略模式组成:

1、抽象策略角色:策略类,通常由一个接口或者抽象类实现

2、具体策略角色:包括相关算法和行为,可能不止一个具体策略角色

3、环境角色:持有一个策略类的引用,最终给客户端调用的。

策略模式编写步骤:

1、对一组算法抽象出一个共同接口,定义这个共同接口

2、编写策略类,实现这个接口,每个策略类都有其独特的实现

3、编写环境角色类,类中持有一个共同接口的引用,对策略对象注入如set方法和get方法或者构造方法完成赋值。


例子:

//策略类

package cn.itcast.strategy;

public interface StrategyHander {

public void hander(Object obj);

}


//具体策略实现类 IntergeHander

package cn.itcast.strategy;

public class IntergeHander implements StrategyHander {

@Override
public void hander(Object obj) {
// TODO Auto-generated method stub
Integer a = (Integer)obj;
System.out.println("this is an integer:"+a);
}

}


//实现类ListHander

package cn.itcast.strategy;

import java.util.List;

public class ListHander implements StrategyHander {

@Override
public void hander(Object obj) {
// TODO Auto-generated method stub
List<Integer> list = (List<Integer>)obj;
for(Integer i: list){
System.out.println("the value is:"+i);
}
}

}


//具体策略类实现类StringHander

package cn.itcast.strategy;

public class StringHander implements StrategyHander {

@Override
public void hander(Object obj) {
// TODO Auto-generated method stub
String str = (String)obj;
System.out.println(str.toUpperCase());
}

}

//环境角色类

package cn.itcast.strategy;

public class StrategyEnviroment {
private StrategyHander hander;

/**
* @return the hander
*/
public StrategyHander getHander() {
return hander;
}

/**
* @param hander the hander to set
*/
public void setHander(StrategyHander hander) {
this.hander = hander;
}

public StrategyEnviroment(StrategyHander hander){
this.hander = hander;
}

public void invoke(Object obj){
hander.hander(obj);
}
}

//测试程序

package cn.itcast.strategy;

import java.util.ArrayList;
import java.util.List;

public class StratgeDemo {
public static void main(String[] args){
StringHander strHander = new StringHander();
StragterEnviroment strEnvirmonet = new StragterEnviroment(strHander);
strEnvirmonet.invoke("abc");

IntergeHander intHander = new IntergeHander();
StragterEnviroment intEnvirmonet = new StragterEnviroment(intHander);
intEnvirmonet.invoke(45);

ListHander lstHander = new ListHander();
StragterEnviroment lstEnvirmonet = new StragterEnviroment(lstHander);
List<Integer>list = new ArrayList<Integer>();
list.add(3);
list.add(4);
list.add(44);
lstEnvirmonet.invoke(list);
}
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:82001次
    • 积分:1853
    • 等级:
    • 排名:千里之外
    • 原创:98篇
    • 转载:55篇
    • 译文:0篇
    • 评论:4条