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-设计模式-行为型模式的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode-设计模式-行为型模式

23种设计模式----行为型模式

六行为型模式---;01.概览和模板方法模式

5 行为型模式之- 责任链模式

《设计模式》策略模式

行为型模式之命令模式