策略模式--java

策略模式:

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

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

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);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值