這是因爲可能有一個關係,但沒有關係必須。
例子:
首先我們有一個Command
接口
public interface Command {
void execute();
}
一些implentations ...
public class CopyFilesCommand implements Command {
@Override
public void execute() {
// copy some files
}
}
public class ZipFilesCommand implements Command {
@Override
public void execute() {
// collect the copied files to a zip archive
}
}
public class MailZipFileCommand implements Command {
@Override
public void execute() {
// mail the zip file to some address
}
}
現在想象用基本配置
public class Config {
private static final Config INSTANCE = new Config();
private List<Command> commands = new ArrayList<>();
private Config() {
// intentionally empty
}
public static List<Command> getCommands() {
return Collections.unmodifiableList(INSTANCE.commands);
}
public static void addCommand(Command command) {
INSTANCE.commands.add(command);
}
}
服務器應用程序
客戶方法現在可以設置這樣
public class Client {
public void setUpConfig() {
Config.addCommand(new CopyFilesCommand());
Config.addCommand(new ZipFilesCommand());
Config.addCommand(new MailZipFileCommand());
}
}
和我們的服務器應用程序則可以採取命令和調用它們
public class Invoker implements Runnable {
@Override
public void run() {
for (Command command : Config.getCommands()) {
command.execute();
}
}
}
你看到客戶端和祈求不要內運行某些服務的配置彼此瞭解(即他們沒有關係),但仍然使用他們都知道的命令一起工作。
這個問題似乎是離題,因爲它應該是http://programmers.stackexchange.com/ –