首页 > 学院 > 开发设计 > 正文

策略模式多种方式实现字符串比较

2019-11-06 07:24:37
字体:
来源:转载
供稿:网友
**调用对象上的方法通常是执行该对象上的某项操作**.

如果一个对象的方法执行其他对象的操作,一个类仅仅导出这个方法(它的实例相当于一个指向该方法的指针),这样的实例被称为函数对象 例如: /** * 如果一个类的所有实例在功能上都是相互等价的,那么他应该被设计为一个singleton

public class StringLengthComparator { PRivate StringLengthComparator() { } public static final StringLengthComparator INSTANCE = new StringLengthComparator(); public int compare(String s1, String s2) { return s1.length() - s2.length(); }}

//策略接口

public interface Comparator<T> { public int compare(T s1,T s2);}

/** * 如果使用匿名雷胜明,将会在每次执行调用的时候创建一个新的实例.应该讲函数对象储存在一个私有的静态域final里面并重用它 * @author JacXuan * */

public class Host {// //使用匿名内部类// Arrays.sort(StringArray,new Comparator<String>(){// public int compare(String s1,String s2){// return s1.length()-s2.length();// }// }) private static class StrlenCmp implements Comparator<String>,Serializable{ @Override public int compare(String s1, String s2) { return s1.length()-s2.length(); } } public static final Comparator<String> STRING_LENGTH_COMPARATOR = new StrlenCmp();}

总结:函数指针的只要用途就是实现策略模式. 在java中实现这种模式,首先要声明一个接口来表示该策略,并且为每个具体策略声明一个实现了该接口的类.当一个具体策略只被调用一次的时候,通常使用匿名类来声明和实例化这个具体的实现类.当一个具体策略是设计用来重复使用的时候,它的类通常就要被实现为私有的静态成员类,并通过公有的静态final域被导出,其类型为该策略接口


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表