Java设计模式泛型化之命令模式
来源:互联网 发布:nba2konline奥登数据 编辑:程序博客网 时间:2024/05/17 21:41
简单理解就是:
司令->传令官->士兵
但是这里隐含了一些东西:
命令是怎样的?
它的基本结构是:
一个抽象的命令接口一个抽象的命令执行者接口一个统一调用类几个具体的命令实现类几个具体的命令执行者实现类一个调用者
先看看代码:
抽象的命令执行者接口
public interface Executor { public void doSomething(); public void doOtherthing();}
具体的命令执行者实现类
public class ExecutorA implements Executor { @Override public void doSomething() { System.out.println("Executor A do something."); } @Override public void doOtherthing() { System.out.println("Executor A do otherthing."); }}
public class ExecutorB implements Executor { @Override public void doSomething() { System.out.println("Executor B do something."); } @Override public void doOtherthing() { System.out.println("Executor B other thing."); }}
抽象的命令接口
public abstract class Command { protected Executor executorA = new ExecutorA(); protected Executor executorB = new ExecutorB(); public abstract void execute();}
具体的命令实现类
public class CommandA extends Command { @Override public void execute() { super.executorA.doSomething(); }}
public class CommandB extends Command { @Override public void execute() { super.executorB.doOtherthing(); }}
统一调用类
public class Invoker { private Command command; public void setCommand(Command command) { this.command = command; } public void doAction() { command.execute(); }}
调用者
public class CommandCaller { public static void main(String[] args) { Command ca = new CommandA(); Invoker in = new Invoker(); in.setCommand(ca); in.doAction(); }}
那么,如何泛型化呢?显然,Command是入口。泛型化代码如下:
抽象的命令接口
@SuppressWarnings("all")public abstract class Command<T extends Executor> { protected T t; public Command(Class<? extends Executor> c) { try { t = (T) Class.forName(c.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } } public abstract void execute();}
具体的命令接口实现类
public class CommandA<T extends Executor> extends Command<T> { public CommandA(Class<? extends Executor> c) { super(c); } @Override public void execute() { super.t.doSomething(); }}
public class CommandB<T extends Executor> extends Command<T> { public CommandB(Class<? extends Executor> c) { super(c); } @Override public void execute() { super.t.doOtherthing(); }}
统一调用类
public class Invoker<T extends Command<? extends Executor>> { private T t; public void setCommand(T t) { this.t = t; } public void doAction() { t.execute(); }}
调用者
public class CommandCaller { public static void main(String[] args) { Command<ExecutorA> ca = new CommandA<ExecutorA>(ExecutorA.class); Invoker<Command<ExecutorA>> in = new Invoker<Command<ExecutorA>>(); in.setCommand(ca); in.doAction(); }}
0 0
- Java设计模式泛型化之命令模式
- Java设计模式-之Command命令模式
- Java设计模式之命令模式
- java设计模式之命令模式Command
- java设计模式之命令者模式
- JAVA设计模式之命令模式
- java设计模式之命令模式
- Java设计模式之命令模式
- java与设计模式之命令模式
- JAVA-设计模式之命令模式
- java设计模式之四命令模式
- java设计模式之命令模式
- java设计模式之命令模式
- JAVA 设计模式之命令模式
- java设计模式之命令模式Command
- JAVA设计模式之命令模式
- java设计模式之命令模式
- java 设计模式之命令模式
- 常使用的正则
- Kruskal算法模板
- 图片轮播器
- 平板电脑能打电话吗?如何让不支持电话功能的平板获得电话功能?
- How to Obtain Tracing of Optimizer Computations (EVENT 10053) (文档 ID 225598.1)
- Java设计模式泛型化之命令模式
- ActionScript 3 单例模式
- 适配器 -- 不兼容结构的协调
- winform登陆后关闭登录窗口跳转到主窗体
- 剖析easyui tree源码(设计原理)来学习easyui
- Redis-API实例
- 翻格子游戏
- Linux下DRBD配置
- JAVA 设计模式-适配器模式