代码虽然很长,不过都是重复的!!
代码1 和 代码2 用2种思想去写,不知道代码2的思想优势体现在哪些方面,实在想不通才拿出来问的,至于顶贴的朋友,请将楼层留给正真回复的朋友谢谢!!
代码1:
import java.util.*;class Processor {
  public String name() {
    return getClass().getSimpleName();
  }
  Object process(Object input) { return input; }
} class Upcase extends Processor {
  String process(Object input) { 
    return ((String)input).toUpperCase();
  }
}class Downcase extends Processor {
  String process(Object input) {
    return ((String)input).toLowerCase();
  }
}class Splitter extends Processor {
  String process(Object input) {
    return Arrays.toString(((String)input).split(" "));
  }
} class Apply2{
  public static void process(Processor p, Object s) {
    System.out.println("Using Processor " + p.name());
    System.out.println(p.process(s));
  }
}public class Test1{
  public static String s ="Disagreement with beliefs is by definition incorrect";
  public static void main(String[] args) {
    Apply2.process(new Upcase(), s);
    Apply2.process(new Downcase(), s);
    Apply2.process(new Splitter(), s);
  }
}代码2:
import java.util.*;class Processor {
  public String name() {
    return getClass().getSimpleName();
  }
  Object process(Object input) { return input; }
} class Upcase extends Processor {
  String process(Object input) { 
    return ((String)input).toUpperCase();
  }
}class Downcase extends Processor {
  String process(Object input) {
    return ((String)input).toLowerCase();
  }
}class Splitter extends Processor {
  String process(Object input) {
    return Arrays.toString(((String)input).split(" "));
  }
} class Apply2{
  public static void process(Adapter p, Object s) {
    System.out.println("Using Processor " + p.name());
    System.out.println(p.process(s));
  }
}class Adapter{
Processor mpr;
public Adapter(Processor mpr){
this.mpr = mpr;
}
public String name() {
    return mpr.name();
  }
  Object process(Object input) { return mpr.process(input); }
}public class Test2{
  public static String s ="Disagreement with beliefs is by definition incorrect";
  public static void main(String[] args) {
   Apply2.process(new Adapter(new Upcase()) , s);      //这种通过过滤器般的编程思想在哪些方面有优势?我觉得还是代码1用起来比较方便~
   Apply2.process(new Adapter(new Downcase()) , s);
   Apply2.process(new Adapter(new Splitter()) , s);
  }
}代码三(这是最原始的代码,更方便)
public class Apply {    //只将方法贴出来
  public static void process(Processor p, Object s) {
    print("Using Processor " + p.name());
    print(p.process(s));
  }
  public static String s ="Disagreement with beliefs is by definition incorrect";
  public static void main(String[] args) {
    process(new Upcase(), s);
    process(new Downcase(), s);
    process(new Splitter(), s);
  }

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【llm0528】截止到2008-07-21 15:46:43的历史汇总数据(不包括此帖):
    发帖的总数量:57                       发帖的总分数:1160                     每贴平均分数:20                       
    回帖的总数量:49                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:56                       结贴的总分数:1120                     
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:40                       
    结贴的百分比:98.25 %               结分的百分比:96.55 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    值得尊敬
      

  2.   

    使用设计模式的中心思想无非就是封装变化点。这个程序的变化点很明显就是可能会有新的Processor出现,那么程序设计的目的就是要在新的Processor子类出现的时候不需要更改原来的程序而是扩展原来的程序。不过我看两个例子都没有达到这个目的。如果换成工厂模式我觉得更好一些。Adapter在这里我觉得没起什么作用。希望高手解惑。
      

  3.   

    代码1,多态,适应需求变更,以便增加新的Processor。
    代码2,Adapter模式,但却没有体现Adapter的优势,即将一个类的接口转化为另一个接口,使得原本接口不兼容的类可以一起工作。在这个例子中,啥用也没有,增加一层封装,让你看得眼花缭乱而已。但如果,有第三方的Processor,它的接口无法直接被Apply2.process()处理,使用Adapter,可以将这种不兼容隔离。
    代码3,够用就好,过多的考虑设计模式,拓展性,很麻烦。