责任型模式包括了:责任链模式、单例模式、观察者模式、中介者模式、代理模式和享元模式。
1、责任链模式(Chain of Responsibility)
为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
优点:1、降低耦合度。它将请求的发送者和接收者解耦。 2、简化了对象。使得对象不需要知道链的结构。 3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。 4、增加新的请求处理类很方便。
缺点:1、不能保证请求一定被接收。 2、在找到正确的处理对象之前,所有的条件判定都要执行一遍,当责任链过长时,可能会引起性能的问题。
使用场景:一个系统的审批需要多个对象才能完成处理的情况下,例如请假系统等。或者代码中存在多个if-else语句的情况下,此时可以考虑使用责任链模式来对代码进行重构。
举例:请假经常会遇到,1天内直接跟你上司请,比如说经理;2天到5天内的话就要找副总裁处理;6天到10天的话就要总裁审批了,这个时候,如果你要递交请假申请,就要依据你的请假天数进行判断到底由谁来审批了,如果你要定义一个方法来处理请假审批的话,如果审批人的更改,或者请假天数与审批人的对应关系有变动,就需要进行代码的修改。而且如果审批流程过细,审批人过多,代码中就会存在很多if-else语句,这时候就使用责任链来实现。
第一步:创建请假的基本类型
第二步:创建抽象的审批人类
第三步:创建实现扩展了该审批人抽象类的实体类
第四步:创建不同类型的审批人。赋予它们不同的审批级别,并在每个审批人中设置下一个审批人。每个审批人中的下一个审批人代表的是链的一部分。
最后:发起请假流程
输出:
2、单例模式(Singleton)
优点:
缺点:
使用场景:
举例:
3、观察者模式(Observer)
优点:
缺点:
使用场景:
举例:
4、 中介者模式(Mediator)
优点:
缺点:
使用场景:
举例:
5、代理模式(Proxy)
优点:
缺点:
使用场景:
举例:
6、享元模式(Flyweight)
优点:
缺点:
使用场景:
举例: