2021-07-26委派模式与策略模式

委派模式—用户调用委派对象,由委派对象将任务进行分配。(委派对象选择调用具体的对象去处理任务)

定义

委派模式(Delegate Pattern):作用是负责任务的调度和任务分配,将任务的分配和执行分开,可以认为是一种特殊情况的静态全权代理属于行为模式

注意:静态代理是结构模式,委派模式是行为模式

应用场景

  • 委派对象本身不知道如何处理请求或任务,把它交给其他对象处理;

  • 实现程序的解耦;

通用写法

委派模式.png

应用场景

ClassLoader.loadClass()

DefaultBeanDefinitionDocumentReader.XX()—delegate //TODO

委派模式优缺点

优点:

通过任务委派能够将一个大型的任务细化,然后通过统一管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率。

缺点:

任务委派方式需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能需要进行多重委派,容易造成紊乱

比较

委派与代理的区别.png

问题:

举例Spring源码中你见过的委派模式,并画出类关系图

策略模式

定义

策略模式(Strategy Pattern):将定义的策略集合分别封装起来,使得他们之间可以互相替换,从而让策略的变化不会影响到使用策略的用户,可以避免多重if ... else ... 和switch语句。属于行为型模式。策略模式通过使用面向对象的继承和多态机制,从而实现同一行为在不同场景下具备不同实现

适用场景

  • 系统中有很多类,他们的区别仅仅在于他们的行为不同。

  • 一个系统需要动态在几种策略中选择一种

  • 需要屏蔽策略规则

通用写法--选择权在用户(单一委派,一般情况下策略模式和委派模式结合使用)

策略模式主要包含三种角色:

  • 上下文(Context):用来操作策略的上下文环境,屏蔽客户端对策略的直接访问,封装可能存在的变化;

  • 抽象策略:规定策略的行为;

  • 具体策略:具体的策略实现;

注意:策略模式中的上下文环境,其职责是隔离客户端与策略类的耦合,让客户端完全与上下文环境沟通,无需关系具体策略。

策略模式.png

策略一般与简单工厂、委派模式结合使用

策略模式前提是用户需要知道有哪些策略

//TODO 两个案例演示

策略模式的优缺点

优点:

  • 策略模式符号开闭原则;

  • 避免使用多重条件转移语句,如if...else...语句、switch语句,将if选择转移给客户来选择

  • 使用策略模式可以提供策略的保密性和安全性;

缺点:

  • 客户端必须知道所有的策略,并且自行决定使用哪一个策略类;

  • 增加多个策略类,增加复杂度

源码使用

Comparator.compare()——比较器(策略)

Arrays.sort().compare()(策略实现)

策略模式的特点:用户选择一种策略进行使用。

问题

利用策略模式重构一段业务代码。

你可能感兴趣的:(2021-07-26委派模式与策略模式)