• [译]ava 设计模式之职责链


    (文章翻译自Java Design Pattern: Chain of Responsibility)

    职责链模式的主要设计思想是为了构建一连串的处理单元,如果阈值满足的话那么这个单元就来处理这个请求。自从这个链构建以后,如果一个单元不满足,那么就会尝试调用下一个,以此类推。每一个请求会沿着这个链被处理。

    职责链模式类图

    chain-of-responsibility-pattern-class-diagram

    职责链Java 代码

    package designpatterns.cor;
     
    abstract class Chain {
        public static int One = 1;
        public static int Two = 2;
        public static int Three = 3;
        protected int Threshold;
     
        protected Chain next;
     
        public void setNext(Chain chain) {
            next = chain;
        }
     
        public void message(String msg, int priority) {
            //if the priority is less than Threshold it is handled
        	if (priority <= Threshold) {
                writeMessage(msg);
            }
     
            if (next != null) {
                next.message(msg, priority);
            }
        }
     
        abstract protected void writeMessage(String msg);
    }
     
    class A extends Chain {
        public A(int threshold) { 
            this.Threshold = threshold;
        }
     
        protected void writeMessage(String msg) {
            System.out.println("A: " + msg);
        }
    }
     
     
    class B extends Chain {
        public B(int threshold) { 
            this.Threshold = threshold;
        }
     
        protected void writeMessage(String msg) {
            System.out.println("B: " + msg);
        }
    }
     
    class C extends Chain {
        public C(int threshold) { 
            this.Threshold = threshold;
        }
     
        protected void writeMessage(String msg) {
            System.out.println("C: " + msg);
        }
    }
     
     
    public class ChainOfResponsibilityExample {
     
        private static Chain createChain() {
            // Build the chain of responsibility
     
        	Chain chain1 = new A(Chain.Three);
     
        	Chain chain2 = new B(Chain.Two);
        	chain1.setNext(chain2);
     
            Chain chain3 = new C(Chain.One);        
            chain2.setNext(chain3);
     
            return chain1;
        }
     
        public static void main(String[] args) {
     
        	Chain chain = createChain();
     
            chain.message("level 3", Chain.Three);
     
            chain.message("level 2", Chain.Two);
     
            chain.message("level 1", Chain.One);
        }
     
    }
    

    在这个例子中,Level1穿过了这个链中的每一个处理单元。

    A: level 3
    A: level 2
    B: level 2
    A: level 1
    B: level 1
    C: level 1
    
  • 相关阅读:
    windows和linux双系统删除linux
    亲测 安装windows7
    (转载)Windows 7 Ultimate(旗舰版)SP1 32/64位官方原版下载(2011年5月12日更新版)
    centos6.5 安装
    centos6.3下载地址
    我开启httpd服务的时候 显示Could not reliably determine the server`s fully qualified domain name,
    hibernate 入门
    linux
    java 数据库两种连接方法
    poj 2195 二分图带权匹配+最小费用最大流
  • 原文地址:https://www.cnblogs.com/zhangminghui/p/4214395.html
Copyright © 2020-2023  润新知