谈java中的策略设计模式

最近研究策略模式,设计情景如下:

要求设计一个类A,我调用它,传入一个对象,要求这个类能按照我希望的方式处理并显示出该对象。这个工具类该怎样设计??你不知道别人想怎么显示,所以就算

你把show的方法实现得再好,也可能不满足要求。那么该怎么弄呢?我们应该把处理显示的方法独立出来,作为一个处理器。给出常用的处理器,同时,当所给的处理器不满足

需求时,用户可以自定义处理器。Comparator接口就是定义怎么比较的处理器,beanutil中的Converter就是定义如何处理对象类型转换的处理器,org.apache.commons.dbutils.handlers

等等都是遵循策略设计模式的例子。

下面,我也写一个简单的小案例来演示一下策略模式。

1、Test 测试类,调用显示工具类

2、Util 工具类,负责显示传入的对象

3、Showable 接口 处理器 定义显示的方式,将要处理的对象,以用户指定的处理器来处理。

4、给出一些常用的处理器

5、常用的处理器不能满足要求的,可以自定义处理器。

//处理器接口

package com.itheima.strategy;

public interface Showable<T>{
 void show(T t);
}
//工具类
package com.itheima.strategy;

//这是一个业务类,需要处理某个对象,而处理对象要交给处理器,因为对象不确定,具体怎么处理不定,所以定一个接
//口,给出几个常见的处理器。如果不够用,则可以自己创建一个处理类,来处理自己的请求。
public class Util {
	public static  void show(Object obj,Showable shower){
		shower.show(obj);
	}
}


//对字符串显示的处理器

package com.itheima.strategy;

public class StringShow implements Showable<String>{

	@Override
	public void show(String t) {
		System.out.println(t.toUpperCase());
	}
}


//对整数显示的处理器

package com.itheima.strategy;

public class IntegerShow implements Showable<Integer> {

	@Override
	public void show(Integer t) {
		System.out.println("您输入的整数是:"+t);
	}

}


//测试类

package com.itheima.strategy;

import java.text.DateFormat;
import java.util.Date;

public class Test {
	public static void main(String[] args) {
		String str = "abc";
		Util.show(str,new StringShow());
		
		int t = 12;
		Util.show(t,new IntegerShow());
		
		Date date = new Date();
		Util.show(date, new Showable<Date>() { //提供的处理器中没有显示时间的,于是客户可以自定义处理器
			@Override
			public void show(Date t) {
				DateFormat df = DateFormat.getDateTimeInstance();
				System.out.println(df.format(t));
			}
			
		});
	}
}
//运行结果:
ABC
您输入的整数是:12
2012-9-5 23:27:58

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值