首页 > 其他分享 >Android 责任链模式

Android 责任链模式

时间:2023-11-24 11:05:02浏览次数:36  
标签:Log money 模式 public 责任 TAG Leader Android lum



文章目录

  • 1、责任链模式简介
  • 2、责任链的定义
  • 3、责任链的使用场景
  • 4、责任链模式的UML类图
  • 5、责任链模式的简单实现
  • 1)示例简介
  • 2)示例分析
  • 3)代码结构
  • 4) Leader 文件
  • 5)GroupLeader 文件
  • 6)、Director 文件
  • 7)、Manager 文件
  • 8)Boss 文件
  • 9)、MainActivity 文件
  • 10)打印 log


1、责任链模式简介

将每个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首段发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。

2、责任链的定义

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

3、责任链的使用场景

1)多个对象可以处理同一请求,但是具体哪个对象进行处理则在运行时动态决定。
2)在请求处理者不明确的情况下向多个现象中的一个提交一个请求。
3)需要动态指定一组对象处理请求。

4、责任链模式的UML类图

Android 责任链模式_android

5、责任链模式的简单实现
1)示例简介

小A 出差 花费 5 万元,需要报销。
小A 找到组长 报销,然而 组长 只能报销 5000 以内数目, 于是组长找到部长报销

部长一看 自己也只有 一万元 报销权限,于是找到 经理报销

经理一看自己只有两万一下报销数目,于是找到老板报销

老板一看是报销单,于是给与报销

2)示例分析

我们可以看到 A 是事件发起者,而老板是最终解决者,他们并没有直接联系。
责任链模式很好的将请求的发起者与处理者解耦。

3)代码结构

Android 责任链模式_android module_02

1)Leader 是一个 抽象类 ,做了两件事情
(1)定义两个抽象方法,来确定一个领导者 应该有的属性和行为 及 批复金额大小,批复行为
(2)声明一个 判断该领导是否有 批复当前金额的能力

2)GroupLeader 继承Leader 类,用于处理自身范围内 报账
3)Director 继承Leader 类,用于处理自身范围内 报账
4) Manager 继承Leader 类,用于处理自身范围内 报账
5) Boss 继承Leader 类,用于处理自身范围内 报账
6)MainActivity 发起报账请求

4) Leader 文件
package com.example.lum.myleadermodule;

/**
 * Created by lum on 2018/11/24.
 */

public abstract class Leader {
    protected  Leader nextHandler; //上一级领导处理者


    //处理报账请求
    public final  void handleRequest(int  money) {
        if (money <= limit()) {
            handle(money);
        } else {
            if (null != nextHandler) {
                nextHandler.handleRequest(money);
            }
        }
    }

    //自身能批复的额度, 不同阶级领导批复不一样
    public abstract  int limit();

    //处理报账行为, 不同阶级领导 都可以在一定范围进行批复
    public abstract  void handle(int money);
}
5)GroupLeader 文件
package com.example.lum.myleadermodule;

import android.util.Log;

/**
 * Created by lum on 2018/11/24.
 */

public class GroupLeader extends Leader {
    private  String  TAG = "GroupLeader: ";
    @Override
    public int limit() {       //组长只能批复 一千以内
        return 1000;
    }

    @Override
    public void handle(int money) {
        Log.i(TAG,"组长批复报销: " + money + "元");
    }
}
6)、Director 文件
package com.example.lum.myleadermodule;

import android.util.Log;

/**
 * Created by lum on 2018/11/24.
 */

public class Director extends Leader {
    private  String  TAG = "Director: ";
    @Override
    public int limit() {       //部长只能批复 5000 以内
        return 5000;
    }

    @Override
    public void handle(int money) {
        Log.i(TAG,"部长批复报销: " + money + "元");
    }
}
7)、Manager 文件
package com.example.lum.myleadermodule;

import android.util.Log;

/**
 * Created by lum on 2018/11/24.
 */

public class Manager extends  Leader {
    private  String  TAG = "Manager: ";
    @Override
    public int limit() {       //经理只能批复 10000 以内
        return 10000;
    }

    @Override
    public void handle(int money) {
        Log.i(TAG,"经理批复报销: " + money + "元");
    }
}
8)Boss 文件
package com.example.lum.myleadermodule;

import android.util.Log;

/**
 * Created by lum on 2018/11/24.
 */

public class Boss extends  Leader {
    private  String  TAG = "Boss: ";
    @Override
    public int limit() {       //老板能批复 到公司破产
        return Integer.MAX_VALUE;
    }

    @Override
    public void handle(int money) {
        Log.i(TAG,"老板批复报销: " + money + "元");
    }
}
9)、MainActivity 文件
package com.example.lum.myleadermodule;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private String  TAG  = "MainActivity: ";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //构造各个领导对象
        GroupLeader groupLeader = new GroupLeader();
        Director director = new Director();
        Manager manager = new Manager();
        Boss boss = new Boss();

        //设置 上一级领导处理者对象
        groupLeader.nextHandler = director;
        director.nextHandler = manager;
        manager.nextHandler  = boss;

        //A 发起报账申请
        Log.i(TAG,"小A 发起报账请求" );
        groupLeader.handleRequest(50000);
    }
}
10)打印 log

Android 责任链模式_责任链模式_03

文献参考:
Android 源码设计模式解析与实战 第二版

本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。


标签:Log,money,模式,public,责任,TAG,Leader,Android,lum
From: https://blog.51cto.com/u_15866638/8546107

相关文章

  • Android 策略模式 接口的调用
    文章目录1、策略模式介绍2、使用场景3、UML类图4、策略模式的简单实现1)文件结构2)CalculateStrategy接口文件3)BusStrategy公交收费策略4)地铁收费策略5)MainActivity调用不同收费策略6)log打印1、策略模式介绍1)实现某一功能可能会有不同的算法,不同的策略。我们根据不同的实际情......
  • Android widget简介及demo
    文章目录1、简介2、文件结构3、res->xml->appwidget_info.xml4、main_activity.xml5、AndroidManifest.xml6、MyWidget.java7、WidgetService.java8、MainActivity.java1、简介实现桌面小部件2、文件结构1)appwidget_info.xml定义了widget一些属性2)AndroidManifest.xml定义w......
  • Android 动态申请 权限 permission
    文章目录1、单个权限动态申请1)文件结构2)在AndroidManifest.xml添加权限3)在代码里进行权限检查和申请2、多个权限动态申请1)在AndroidManifest.xml添加权限2)、CheckPermission文件3)在MainActivity文件里面调用CheckPermission1、单个权限动态申请以SD卡读写权限......
  • Android典型技术模块开发详解 pdf 资料
    文章目录1、介绍2、章节介绍1、介绍Android典型技术模块开发详解适合刚步入Android开发的工作者,对于Android各个模块能够很好、很全面的讲解。2、章节介绍Android典型技术模块开发详解pdfAndroid典型技术模块开发详解代码文献参考:《Android典型技术模块开发详解》......
  • Android MVC 模式的介绍 与 实战
    文章目录1、mvc框架图2、MVC在Android模式里的实现4、小结1、mvc框架图经典的mvc模式如图所示1)Model(模型层)在MVC中Model一般用来保存数据的状态,比如数据存储,网络请求。同时还与View存在一定的耦合,通过某种事件机制(比如观察者模式)通知View状态的改变来让view更......
  • Android 抽象工厂模式
    文章目录1、抽象工厂模式介绍2、抽象工厂模式的定义3、抽象工厂模式的使用场景4、抽象工厂模式的简单实现5、小结1、抽象工厂模式介绍抽象工厂模式也是创建型模式之一,抽象工厂模式起源于对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件及其实现。2、抽象工厂模......
  • Android 工厂方法模式
    文章目录1、工厂方法模式介绍2、工厂方法模式的定义3、使用场景4、模式的简单实现1、工厂方法模式介绍工厂方法模式(FactoryPattern),是创建型设计模式之一。工厂方法模式是一个结构比较简单的模式。2、工厂方法模式的定义就是一个用于创建对象的接口,让子类来决定实体化那个类。3......
  • Androd 原型模式
    文章目录1、原型模式介绍2、使用场景3、原型模式UML类图4、原型模式的简单实现1)文件结构2)WordDocumentClass.java文件3)ClientActivity.java文件5、浅拷贝和深拷贝1、原型模式介绍1)该模式有一个样板实例,用户从这个样板对象中复制一个内部属性一致的对象。2)复制的实例就是我......
  • Android 单例模式
    文章目录1、单例模式介绍2、单例模式的简单例子3、懒汉模式实现单例模式4、DoubleCheckLock(DLC)实现单例5、静态内部类单例模式6、枚举单例7、使用容器是实现单例模式1、单例模式介绍据说在一个app中,单例对象的类必须保证只有一个实例存在,系统只有一个全局变量存在。2、单......
  • Java设计模式之单例模式
    单例模式(SingletonPattern)是一种常用的设计模式,它用于限制一个类只能创建一个实例,并提供一个全局访问点。在Java中,实现单例模式的关键点包括:私有的构造函数:为了防止其他类创建该类的实例,我们需要将构造函数设为私有。静态的实例变量:我们需要一个静态的变量来存储该类的唯一......