📜  纵横开关(1)

📅  最后修改于: 2023-12-03 15:41:14.259000             🧑  作者: Mango

纵横开关——面向对象的设计模式

概述

纵横开关(Switch)是一种常用的设计模式,属于行为型模式,它通过对不同命令进行封装,使得可以动态地控制程序响应哪些命令。

它将对象封装成一个开关,开关上有几个按钮,每个按钮代表一个命令。当用户按下按钮时,对应的命令就会被执行。

实现

在纵横开关模式中,主要有以下角色:

  • Switch(开关):将命令和接收者绑定在一起,能够响应执行命令的请求。它包含一个具体命令对象的引用。
  • Command(命令):是一个接口或抽象类,包含了执行命令的抽象方法。
  • ConcreteCommand(具体命令):实现Command接口,具有执行具体业务的能力。
  • Receiver(接收者):负责具体执行命令的对象。
  • Client(客户端):创建命令对象,将命令对象和接收者对象传递给开关对象,然后执行命令。
// 命令接口
public interface Command {
    void execute();
}

// 具体命令
public class ConcreteCommand implements Command {
    private Receiver receiver;
    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }
    @Override
    public void execute() {
        receiver.action();
    }
}

// 接收者
public class Receiver {
    public void action() {
        System.out.println("接收者执行命令");
    }
}

// 开关
public class Switch {
    private Command command;
    public Switch(Command command) {
        this.command = command;
    }
    public void executeCommand() {
        command.execute();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Switch s = new Switch(command);
        s.executeCommand(); // 输出:接收者执行命令
    }
}
应用场景

纵横开关模式通常用于以下场景:

  • 希望从一个对象发起请求,但不知道接收者是谁,也就是请求发送者与接收者之间的耦合关系较大。
  • 有多个操作可以执行,但是需要动态地确定执行哪个操作。
  • 希望在不同的时间指定请求、将请求排队,并对请求进行执行或者取消。
优点与缺点

纵横开关模式的优点包括:

  • 开闭原则。可以在不修改已有代码的情况下引入新的命令和接收者。
  • 单一职责原则。每个对象都只负责一项职责,使得代码更加结构化。

纵横开关模式的缺点包括:

  • 纵横开关模式中的代码可能存在大量的具体命令类。
  • 可能需要大量的开关类,增加系统的复杂度。
总结

纵横开关模式是一种常用的行为型设计模式。它通过将命令和接收者绑定在一起,实现了系统的解耦,提高了程序的灵活性和可扩展性。我们可以将它应用于各种场景,如遥控器、编辑器、动画控制等。