命令模式:你的系统设计一个命令行界面,用户可输入命令来执行某项功能。通过命令来执行该命令执行具体要做的事情,这个可以应对系统不因功能的添加而修改,又可灵活加入命令和功能。
以命令的方式,解耦调用者与功能的具体实现者,降低系统耦合度,提供了灵活性。如:Servlet Controller 线程池。
接下来我们举个应用场景:点奶茶,通过客户点单选择不同的奶茶执行,相应的流程。
示例代码
/*** 统一抽象出来的命令操作*/public interface Command {public void build();//生产奶茶}/*** 命令之-烧仙草*/public class ShaoxiancaoMilk implements Command {public void build() {System.out.println("制作烧仙草");}}/*** 命令之-木瓜*/public class PawpawMilk implements Command {@Overridepublic void build() {System.out.println("制作木瓜奶茶");}}/*** 命令之-原味*/public class TasteMilk implements Command {@Overridepublic void build() {System.out.println("开始制作原味奶茶");}}/*** 服务生招待客人*/public class Waitress {private Map<String, Command> commands = new HashMap<>();public void register(String cmd, Command run) {commands.put(cmd, run);}/*** 客人点单*/public void receiver(String command) {System.out.println("您选择了:"+command);Command cmd = commands.get(command);if(cmd == null) {System.out.println("没有这样的品种");}else {cmd.build();}}public void showMenu() {System.out.println("老板你好,本有以下奶茶:");commands.keySet().forEach((item)->{System.out.println("\t"+item);});}}
测试代码:
public static void main(String[] args) {Waitress waiter = new Waitress();waiter.register("烧仙草", new ShaoxiancaoMilk());waiter.register("原味奶茶", new TasteMilk());waiter.register("木瓜奶茶", new PawpawMilk());waiter.showMenu();Scanner scanner = new Scanner(System.in);System.out.println("请选择:");// 发送内容String command = scanner.nextLine();waiter.receiver(command);scanner.close();}--控制台老板你好,本有以下奶茶:木瓜奶茶烧仙草原味奶茶请选择:木瓜奶茶 (控制台输入的)您选择了:木瓜奶茶制作木瓜奶茶

