委派模式—用户调用委派对象,由委派对象将任务进行分配。(委派对象选择调用具体的对象去处理任务)
定义
委派模式(Delegate Pattern):作用是负责任务的调度和任务分配,将任务的分配和执行分开,可以认为是一种特殊情况的静态全权代理属于行为模式
注意:静态代理是结构模式,委派模式是行为模式
应用场景
委派对象本身不知道如何处理请求或任务,把它交给其他对象处理;
实现程序的解耦;
通用写法
应用场景
ClassLoader.loadClass()
DefaultBeanDefinitionDocumentReader.XX()—delegate //TODO
委派模式优缺点
优点:
通过任务委派能够将一个大型的任务细化,然后通过统一管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率。
缺点:
任务委派方式需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能需要进行多重委派,容易造成紊乱。
比较
问题:
举例Spring源码中你见过的委派模式,并画出类关系图
策略模式
定义
策略模式(Strategy Pattern):将定义的策略集合分别封装起来,使得他们之间可以互相替换,从而让策略的变化不会影响到使用策略的用户,可以避免多重if ... else ... 和switch语句。属于行为型模式。策略模式通过使用面向对象的继承和多态机制,从而实现同一行为在不同场景下具备不同实现。
适用场景
系统中有很多类,他们的区别仅仅在于他们的行为不同。
一个系统需要动态在几种策略中选择一种。
需要屏蔽策略规则
通用写法--选择权在用户(单一委派,一般情况下策略模式和委派模式结合使用)
策略模式主要包含三种角色:
上下文(Context):用来操作策略的上下文环境,屏蔽客户端对策略的直接访问,封装可能存在的变化;
抽象策略:规定策略的行为;
具体策略:具体的策略实现;
注意:策略模式中的上下文环境,其职责是隔离客户端与策略类的耦合,让客户端完全与上下文环境沟通,无需关系具体策略。
策略一般与简单工厂、委派模式结合使用
策略模式前提是用户需要知道有哪些策略
//TODO 两个案例演示
策略模式的优缺点
优点:
策略模式符号开闭原则;
避免使用多重条件转移语句,如if...else...语句、switch语句,将if选择转移给客户来选择;
使用策略模式可以提供策略的保密性和安全性;
缺点:
客户端必须知道所有的策略,并且自行决定使用哪一个策略类;
增加多个策略类,增加复杂度
源码使用
Comparator.compare()——比较器(策略)
Arrays.sort().compare()(策略实现)
策略模式的特点:用户选择一种策略进行使用。
问题
利用策略模式重构一段业务代码。