• java策略模式简单例程


    本代码拷贝自《Java编程思想第四版》接口一章。

    //: interfaces/classprocessor/Apply.java
    package interfaces;
    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) { // Covariant return
        return ((String)input).toUpperCase();
      }
    }
    
    class Downcase extends Processor {
      String process(Object input) {
        return ((String)input).toLowerCase();
      }
    }
    
    class Splitter extends Processor {
      String process(Object input) {
        // The split() argument divides a String into pieces:
        return Arrays.toString(((String)input).split(" "));
      }
    }    
    
    public class Apply {
      public static void process(Processor p, Object s) {
        System.out.println("Using Processor " + p.name());
        System.out.println(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);
      }
    } /* Output:
    Using Processor Upcase
    DISAGREEMENT WITH BELIEFS IS BY DEFINITION INCORRECT
    Using Processor Downcase
    disagreement with beliefs is by definition incorrect
    Using Processor Splitter
    [Disagreement, with, beliefs, is, by, definition, incorrect]
    *///:~

    Apply.process()方法可以接受任何类型的Processor,并将其应用到一个Object对象上,像这样创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略模式。该模式中包含固定部分和变化部分,在这里,固定部分是String s, 而变化部分是不同的Processor,Processor就是一个策略,根据策略的不同,得到不同的结果。

  • 相关阅读:
    DirectUI精髓之一 控件布局的自动缩放(弹簧特性)
    windows mobile6.5截屏工具
    实现的ATL(AtlSimpleArray)数组任意插入辅助函数
    动态库中单例一记
    ASP.NET组件设计Step by Step(4)
    Asp.net 中服务端控件事件是如何触发的
    PagesSection.EnableEventValidation 属性
    ASP.NET事件回传机制
    (服务器控件)页面框架处理回发数据的过程
    ASP.NET底层架构
  • 原文地址:https://www.cnblogs.com/bejour/p/3352151.html
Copyright © 2020-2023  润新知