最近开始学习gef,今天看到这种设计模式.
***Invoker.java
import java.util.*;
public class Invoker {
private Map commands;
public Invoker() {
commands = new HashMap();
}
public void addCommand(String commName, ICommand command) {
commands.put(commName, command);
}
public void request(String commName) {
ICommand command = (ICommand) commands.get(commName);
command.execute();
}
}
*****ICommand.java
public interface ICommand {
public void execute();
}
*****UpperCaseHello.java
public class UpperCaseHello implements ICommand {
private String name;
public UpperCaseHello(String name) {
this.name = name;
}
public void execute() {
System.out.println("HELLO, " + name.toUpperCase());
}
}
****LowerCaseHello.java
public class LowerCaseHello implements ICommand {
private String name;
public LowerCaseHello(String name) {
this.name = name;
}
public void execute() {
System.out.println("hello, " + name.toLowerCase());
}
}
Client模擬隨機的請求,Invoker事先並不知道Client會發出什麼需求,但它總是可以執行Client的請求:
******Client.java
public class Client {
public static void main(String[] args) {
//创建一个装载类
Invoker invoker = new Invoker();
//将两种模式装载进来
invoker.addCommand("JUSTIN",new UpperCaseHello("Justin"));
invoker.addCommand("momor",new LowerCaseHello("momor"));
//通过装载时设置的key值进行调用相应的函数,使用了多态
// simulate random request
String[] req = {"JUSTIN", "momor"};
while(true) {
int i = (int) (Math.random() * 10) % 2;
//一直使用Revoker类进行外部的调用
invoker.request(req[i]);
}
}
}
总的来说:
1 建立了一个外部交互类 负责加载(应用hashMap)和调用(利用多态)
2 对于要调用的各种类采用了多态集中到一个借口管理