Leetcode-设计模式-行为型模式
Posted 钢铁-程序猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode-设计模式-行为型模式相关的知识,希望对你有一定的参考价值。
行为型模式
一、责任链模式(责任链主要用于处理 职责相同,程度不同的类)
责任链模式的优点:
- 降低对象之间的耦合
- 扩展性强,符合开闭原则
- 灵活性强
- 简化对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用
缺点:
- 如果责任链过长,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。
- 不能保证每个请求一定被处理,该请求可能一直传到链的末端都得不到处理。
例子
新建一个程序员抽象类:
public abstract class Programmer
protected Programmer next;
public void setNext(Programmer next)
this.next = next;
abstract void handle(Bug bug);
在这个抽象类中:
- next 对象表示如果自己解决不了,需要将责任传递给的下一个人;
- handle 方法表示自己处理此 bug 的逻辑,在这里判断是自己解决或者继续传递。
新建菜鸟程序员类:
public class NewbieProgrammer extends Programmer
@Override
public void handle(Bug bug)
if (bug.value > 0 && bug.value <= 20)
solve(bug);
else if (next != null)
next.handle(bug);
private void solve(Bug bug)
System.out.println("菜鸟程序员解决了一个难度为 " + bug.value + " 的 bug");
新建普通程序员类:
public class NormalProgrammer extends Programmer
@Override
public void handle(Bug bug)
if (bug.value > 20 && bug.value <= 50)
solve(bug);
else if (next != null)
next.handle(bug);
private void solve(Bug bug)
System.out.println("普通程序员解决了一个难度为 " + bug.value + " 的 bug");
新建优秀程序员类:
public class GoodProgrammer extends Programmer
@Override
public void handle(Bug bug)
if (bug.value > 50 && bug.value <= 100)
solve(bug);
else if (next != null)
next.handle(bug);
private void solve(Bug bug)
System.out.println("优秀程序员解决了一个难度为 " + bug.value + " 的 bug");
客户端测试:
import org.junit.Test;
public class Client4
@Test
public void test()
NewbieProgrammer newbie = new NewbieProgrammer();
NormalProgrammer normal = new NormalProgrammer();
GoodProgrammer good = new GoodProgrammer();
Bug easy = new Bug(20);
Bug middle = new Bug(50);
Bug hard = new Bug(100);
// 组成责任链
newbie.setNext(normal);
normal.setNext(good);
// 从菜鸟程序员开始,沿着责任链传递
newbie.handle(easy);
newbie.handle(middle);
newbie.handle(hard);
以上是关于Leetcode-设计模式-行为型模式的主要内容,如果未能解决你的问题,请参考以下文章