首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JDP02-[计策模式]-字符串处理

2012-12-23 
JDP02-[策略模式]-字符串处理程序功能:字符串处理?interface Processor {String name()Object process(Ob

JDP02-[策略模式]-字符串处理

程序功能:字符串处理

?

interface Processor {    String name();    Object process(Object input);}class StringProcessor implements Processor {    public String name() {        return getClass().getSimpleName();    }    public Object process(Object input) {        return input;    }}class Upcase extends StringProcessor {    public String process(Object input) {        return ((String) input).toUpperCase();    }}class LowerCase extends StringProcessor {    public String process(Object input) {        return ((String) input).toLowerCase();    }}class Spliter extends StringProcessor {    public String process(Object input) {        return Arrays.toString(((String) input).split(" "));    }}public class Apply {    public static void process(Processor p, Object input) {        System.out.println("使用的策略是 " + p.name());        System.out.println(p.process(input));    }    public static void main(String[] args) {        String s = "sds HGfhj dsfsDF fdgf ssDD";        process(new Upcase(), s);        process(new LowerCase(), s);        process(new Spliter(), s);    }}

?

?

打印出的结果是:

使用的策略是 Upcase

SDS HGFHJ DSFSDF FDGF SSDD

使用的策略是 LowerCase

sds hgfhj dsfsdf fdgf ssdd

使用的策略是 Spliter

[sds, HGfhj, dsfsDF, fdgf, ssDD]

?

?

 public static void process(Processor p, Object input) {        System.out.println("使用的策略是 " + p.name());        System.out.println(p.process(input));    }

?

? ? 这就是3中不同的策略都用在了处理一种字符串上,如果方法是一段及其复杂的代码段,那么就可以很好的起到重用的效果,开闭原则:扩展开放,更改关闭很好的体现了出来。如果有新的策略,比如让字符串反序输出的策略,源代码完全不用更改,直接扩展新的类就可以了。?

?

? ? 策略模式的主要思想还是java的很多基础概念的综合运用,其实就是万变不离其宗,刚开始看Apply中的process方法会有点疑惑,p是接口的引用,根本还未指向任何实际的对象,怎么能调用name()方法和process方法呢,这两个是抽象的啊。?

?

? ? java是一种强类型检查的语言,无时无刻都在检查着你的类项是否正确,在编译阶段,java发现引用p的类型是Processor ,而name()方法和process方法确实是Processor类中为对象所定义的方法,这就够了,这就已经符合了编译器的要求,而在真正的运行期,java的多态和后期绑定就来了,而且帮你自动完成,执行程序的时候,java才会去看,p真正引用的对象是谁,那么就调用这个对象的方法,所以反射机制也能正确的显示出正在被加载的策略的正确的名

称。?

?

? ? 这也很好的体现出了面向接口编程,Processor p 就是接口引用,如果它设计好了,你的代码就可以操控它和它的所有实现类了,所以我们的代码要面向接口编程,参数是接口化的,而不是对着接口的某300种实现在写程序,只要对着接口引用写就行了,后面的多态和后期绑定,java会自己帮我们完成的。?

热点排行