今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

委派设计模式(delegation)

定义

委派模式是一种结构型设计模式,它允许一个对象(称为委托对象)将某些任务委派给其他对象(称为委托类),以便自己专注于更高级别的工作。在委派模式中,委托对象负责任务的分发和协调,但实际的工作由其他对象来执行。

意图

  • 将对象在外部表现出特定行为的责任委托给关联的对象。

参与者(角色)

  • 委托对象(Delegator): 负责分发任务的对象,它将任务委托给其他对象来执行。

  • 委托接口(Delegate Interface): 委派对象所实现的接口或抽象类,定义了委托对象可以委派的任务。

  • 委托类(Delegate Class): 实际执行任务的对象,它实现了委托接口,并负责完成委派对象指派的具体任务。

举例

以不同的打印机为例

类图:

这个例子中对应类的角色如下:

  • 委托对象(Delegator): PrinterDelegator

  • 委托接口(Delegate Interface): Printer

  • 委托类(Delegate Class): CanonPrinter,EpsonPrinter,HpPrinter

Printer打印机,执行打印任务

/**
 打印机
 */
public interface Printer {

  void print(final String message);
}

 

HpPrinter

@Slf4j
public class HpPrinter implements Printer {

  /**
   * {@inheritDoc}
   */
  @Override
  public void print(String message) {
    log.info("惠普打印机 : {}", message);
  }

}

 

EpsonPrinter

@Slf4j
public class EpsonPrinter implements Printer {

  /**
   * {@inheritDoc}
   */
  @Override
  public void print(String message) {
    log.info("爱普生打印机 : {}", message);
  }

}

 

PrinterDelegator委派对象

 

public class PrinterDelegator implements Printer {

  private  Printer printer;

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

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

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

测试

public class App {

  private static final String MESSAGE_TO_PRINT = "委派给不同的打印机";

  public static void main(String[] args) {
    PrinterDelegator printerDelegator = new PrinterDelegator(new HpPrinter());

    printerDelegator.print(MESSAGE_TO_PRINT);
    printerDelegator.setPrinter(new CanonPrinter());
    printerDelegator.print(MESSAGE_TO_PRINT);
    printerDelegator.setPrinter(new EpsonPrinter());
    printerDelegator.print(MESSAGE_TO_PRINT);
  }

}

 

优点

  1. 降低耦合性: 委派对象与实际执行任务的对象解耦,使得两者之间的关系更加灵活。

  2. 集中控制: 委派对象负责任务的调度和分发,可以实现更灵活的任务管理和调度策略。

  3. 提高复用性: 实现了委派接口的多个委派类可以复用相同的任务执行逻辑。

缺点

  1. 复杂性增加: 委派模式引入了额外的类和对象,增加了代码的复杂性和维护成本。
  2. 灵活性受限: 委派模式在某种程度上限制了灵活性,因为它需要明确指定委派关系,导致扩展时需要修改代码。

代理模式的应用

nacos

客户端注册时,根据配置不同使用grpc或着http请求方式

 

 

 

 

分享到:

专栏

类型标签

网站访问总量