策略模式--java

原创 2013年12月05日 22:19:17

策略模式:

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

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

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

相关文章推荐

java策略模式

  • 2017年06月19日 22:13
  • 12KB
  • 下载

java_策略模式

  • 2012年06月02日 23:56
  • 22KB
  • 下载

Java经典编程300例之实例064 策略模式的简单应用

实例说明 在使用图像处理软件处理图片后,需要选择一种格式进行保存,然而各种格式在底层实现的算法并不相同,这刚好适合策略模式。本实例将演示如何使用策略模式与简单工厂模式组合进行实例开发。   实现...

java策略模式

  • 2014年10月26日 22:35
  • 1KB
  • 下载

java代码策略模式

  • 2016年12月15日 16:04
  • 493B
  • 下载

Java Design Patterns--Strategy Pattern --策略模式

一.创建接口 public interface Strategy { public int doOperation(int num1, int num2); } 二.创建具体的实现类,实现St...

java 策略模式的小例子

  • 2015年07月12日 22:13
  • 9KB
  • 下载

java策略模式源代码

  • 2014年02月06日 16:00
  • 6KB
  • 下载

java策略模式简单用例

运用java策略模式一个小程序 /** * */ package Strategy; import java.util.Arrays; /** * @author HuangRong ...

java 策略模式

  • 2012年04月05日 23:15
  • 12KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:策略模式--java
举报原因:
原因补充:

(最多只允许输入30个字)