澳门新葡亰娱乐网站-www.142net-欢迎您

澳门新葡亰娱乐网站是因为你还没有找到一条正确的致富之路,www.142net是将所有的游戏都汇集在一起的官方平台,因为澳门新葡亰娱乐网站这个网站当中有着大量的游戏攻略,托IP定位技术,传达终端直接到达的精准传播方式。

责任链模式

来源:http://www.bhtsgq.com 作者:计算机知识 人气:110 发布时间:2019-05-30
摘要:责任链情势-Chain of Responsibility, 例1 在这种形式中,经常每一种接收者都饱含对另3个接收者的引用。假如1个目的不可能处理该请求,那么它会把一样的伏乞传给下一个接收者,就那样推

责任链情势-Chain of Responsibility, 例1

在这种形式中,经常每一种接收者都饱含对另3个接收者的引用。假如1个目的不可能处理该请求,那么它会把一样的伏乞传给下一个接收者,就那样推算。

义务链方式-Chain of Responsibility

在这种格局中,日常种种接收者都含有对另1个接收者的引用。借使3个对象无法处理该请求,那么它会把一样的呼吁传给下五个接收者,就那样推算。

作者们在此地换一个地方:

国君(King类), 平日会境遇各样劳动(Trouble类), 而天皇1旦遇见麻烦, 则会把劳动交给手下去做.

澳门普金网址,国君有一天上了战场, 任务法派的各种是如此的, 骑兵先上, 骑兵不行步兵上, 步兵不行就换贴身护卫上.

Java Chain of Responsibility Pattern(权利链情势)

责任链模式。义务链情势(Chain of Responsibility Pattern)为呼吁成立了3个接收者对象的链。这种形式给予请求的品类,对请求的发送者和接收者进行解耦。那连串型的设计格局属于行为型格局。
在这种形式中,经常各个接收者都富含对另一个接收者的引用。假如一个指标不可能管理该请求,那么它会把一样的伸手传给下一个接收者,依此类推。

关键代码:Handler 里面聚合它本人,在 HanleRequest 里判定是或不是妥帖,如若没落成规范则向下传递,向什么人传递之前 set 进去。

可取: 一、下跌耦合度。它将请求的发送者和接收者解耦。 二、简化了对象。使得对象不供给知道链的布局。 三、巩固给目的指派任务的油滑。通过退换链内的分子要么调度它们的主次,允许动态地新扩充大概去除权利。 四、扩展新的伸手处理类很便宜。
缺陷: 1、不能够确定保障请求一定被吸收接纳。 二、系统天性将面对一定影响,而且在进展代码调节和测试时不太有利,恐怕会形成循环调用。 三、大概不便于观看运营时的表征,有碍于除错。

  1. 创办抽象的记录器类。
/**
 * 1. 创建抽象的记录器类。
 * @author mazaiting
 */
public abstract class AbstractLogger {
    public static int INFO = 1;
    public static int DEBUG = 2;
    public static int ERROR = 3;

    protected int level;
    /**责任链中的下一个元素*/
    protected AbstractLogger nextLogger;
    /**设置责任链中的下一个元素*/
    public void setNextLogger(AbstractLogger nextLogger) {
        this.nextLogger = nextLogger;
    }
    /**打印信息*/
    public void logMessage(int level, String message){
        if (this.level <= level){
            write(message);
        }
        if (nextLogger != null) {
            nextLogger.logMessage(level, message);
        }
    }
    /**写消息*/
    protected abstract void write(String message);


}
  1. 创办扩张了该记录器类的实体类。
/**
 * 2. 创建扩展了该记录器类的实体类。
 * @author mazaiting
 */
public class ConsoleLogger extends AbstractLogger{

    public ConsoleLogger(int level){
        this.level = level;
    }

    @Override
    protected void write(String message) {
        System.out.println("Standard Console::Logger: "   message);
    }

}

/**
 * 2. 创建扩展了该记录器类的实体类。
 * @author mazaiting
 */
public class ErrorLogger extends AbstractLogger{

    public ErrorLogger(int level){
        this.level = level;
    }

    @Override
    protected void write(String message) {
        System.out.println("Standard Error::Logger: "   message);
    }

}

/**
 * 2. 创建扩展了该记录器类的实体类。
 * @author mazaiting
 */
public class FileLogger extends AbstractLogger{

    public FileLogger(int level){
        this.level = level;
    }

    @Override
    protected void write(String message) {
        System.out.println("Standard File::Logger: "   message);
    }

}
  1. 创办分化类型的记录器。赋予它们区别的荒谬等第,并在每种记录器中设置下三个记录器。每一个记录器中的下二个记录器代表的是链的壹有个别。
/**
 * 3. 创建不同类型的记录器。赋予它们不同的错误级别,并在每个记录器中设置下一个记录器。
 * 每个记录器中的下一个记录器代表的是链的一部分
 * @author mazaiting
 */
public class Client {
    public static void main(String[] args) {
        AbstractLogger loggerChain = getChainOfLoggers();

        loggerChain.logMessage(AbstractLogger.INFO, 
                 "This is an information.");

              loggerChain.logMessage(AbstractLogger.DEBUG, 
                 "This is an debug level information.");

              loggerChain.logMessage(AbstractLogger.ERROR, 
                 "This is an error information.");
    }

    /**
     * 获取责任链
     */
    private static AbstractLogger getChainOfLoggers(){
        AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
        AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
        AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);

        errorLogger.setNextLogger(fileLogger);
        fileLogger.setNextLogger(consoleLogger);

        return errorLogger;     
    }
}
  1. 打字与印刷结果
Standard Console::Logger: This is an information.
Standard File::Logger: This is an debug level information.
Standard Console::Logger: This is an debug level information.
Standard Error::Logger: This is an error information.
Standard File::Logger: This is an error information.
Standard Console::Logger: This is an error information.

义务链情势是一种设计格局。在职分链形式里,大多对象由每三个对象对其下家的引用而连接起来形成一条链。请求在那些链上传递,直到链上的某3个对象说了算拍卖此呼吁。发出这么些请求的客户端并不知道链上的哪三个指标最后管理这一个请求,那使得系统能够在不影响客户端的境况下动态地重复组织和分红权利。

Trouble类

本类是:待权利链来管理的题目Trouble类.

本例子较轻松, Trouble唯有3个int型作为待管理的编号.

public class Trouble {
    private int number;

    public Trouble(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

    public String toString() {
        return "[Trouble "   number   "]";
    }
}

TroubleType枚举

在这里枚举了, 太岁在沙场上有二种业务会分派给手下去做

public enum TroubleType {
    DEFEND, ATTACK, PROTECT
}  

 

Support抽象类

Support类是义务链中的节点抽象出来的合并定义.

public abstract class Support {
    private String name;
    private Support next;

    public Support(String name) {
        this.name = name;
    }

    public Support setNext(Support next) {
        this.next = next;
        return next;
    }

    protected abstract boolean solve(Trouble trouble);

    protected void done(Trouble trouble) {  // 解决
        System.out.println(trouble   " is resolved by "   this   ".");
    }

    protected void fail(Trouble trouble) {  // 未解决
        System.out.println(trouble   " cannot be resolved.");
    }

    public void execute(Trouble trouble) {
        if (solve(trouble)) {
            done(trouble);
        } else if (next != null) {
            next.execute(trouble);
        } else {
            fail(trouble);
        }
    }

    public String toString() {
        return "["   name   "]";
    }
}

Trouble类

这里是君主分配的业务

public class Trouble {
    private final TroubleType troubleType;
    private final String requestDescription;

    public Trouble(final TroubleType troubleType, final String requestDescription) {
        this.troubleType = Objects.requireNonNull(troubleType);
        this.requestDescription = Objects.requireNonNull(requestDescription);
    }

    public String getRequestDescription() {
        return requestDescription;
    }

    public TroubleType getRequestType() {
        return troubleType;
    }

    @Override
    public String toString() {
        return getRequestDescription();
    }
}

在阎宏硕士的《JAVA与模式》壹书中初阶是这样描述权利链(Chain of Responsibility)格局的:

本文由澳门新葡亰发布于计算机知识,转载请注明出处:责任链模式

关键词: Java 设计 Java Design 设计模式

上一篇:js不得不说的12点内容

下一篇:没有了

最火资讯