它允许对象将任务委托给另一个对象来执行。委托模式的核心思想是将某个对象的行为或责任委托给另一个对象,以实现更好的代码复用和灵活性。

主要角色

  1. 委托者(Delegator)
  2. 委托对象(Delegatee)
// 定义一个接口,表示打印行为
interface Printer {
    void print(String message);
}

// 实现具体的打印行为
class ConsolePrinter implements Printer {
    @Override
    public void print(String message) {
        System.out.println("Console: " + message);
    }
}

class FilePrinter implements Printer {
    @Override
    public void print(String message) {
        // 假设将消息写入文件
        System.out.println("File: " + message);
    }
}
// 委托者类,持有一个Printer对象
class PrinterDelegator {
    private Printer printer;

    public PrinterDelegator(Printer printer) {
        this.printer = printer;
    }

    public void setPrinter(Printer printer) {
        this.printer = printer;
    }

    public void print(String message) {
        printer.print(message);
    }
}

// 使用委托模式
public class DelegatePatternExample {
    public static void main(String[] args) {
        Printer consolePrinter = new ConsolePrinter();
        Printer filePrinter = new FilePrinter();

        PrinterDelegator delegator = new PrinterDelegator(consolePrinter);
        delegator.print("Hello, World!");

        // 动态改变委托对象
        delegator.setPrinter(filePrinter);
        delegator.print("Hello, World!");
    }
}