zoukankan      html  css  js  c++  java
  • 设计模式14-责任链模式

    1. 概念

        使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系  

    2. 案例

      

    package org.demo.chainofresponsibility.demo;
    /**
     * 使多个对象都有机会处理请求,
     * 从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,
            并沿着这条链传递该请求,直到有一个对象处理它为止
     * Function : 
     * @author : Liaokailin
     * CreateDate : 2014-3-7
     * version : 1.0
     */
    
    interface Request{
        void myRequest() ;
    }
    
    class DimissionRequest implements Request{
    
        @Override
        public void myRequest() {
            System.out.println("离职请求") ;
        }
    }
    
    class AddMoneyRequest implements Request{
        public void myRequest(){
            System.out.println("加薪请求") ;
        }
    }
    
    interface RequestHandler{
        public void handle(Request request) ;
    }
    
    class HRRequestHandler implements RequestHandler{
        @Override
        public void handle(Request request) {
            if(request instanceof DimissionRequest){
                System.out.println("人力资源审批中..") ;
            }
            System.out.println("人力资源审批结束") ;
        }
    }
    
    class PMRequestHandler implements RequestHandler{
        RequestHandler rh ; 
        public PMRequestHandler(RequestHandler rh){
            this.rh = rh ;
        }
        @Override
        public void handle(Request request) {
            boolean result = false ;
            if(request instanceof AddMoneyRequest){
                System.out.println("项目经理审批中...") ;
                result = true ;
            }
            if(result){ //转交到部门经理
                rh.handle(request) ;
            }
        }
        
    }
    
    class DMRequestHandler implements RequestHandler{
        /*RequestHandler rh  ;
        public DMRequestHandler(RequestHandler rh){
            this.rh = rh ;
        }*/
        @Override
        public void handle(Request request) {
            if(request instanceof AddMoneyRequest){
                System.out.println("部门经理审批中...") ;
            }
            System.out.println("部门经理审批结束 加薪一万块.") ;
        }
    }
    public class Demo01 {
        public static void main(String args[]){
            Request dimissionRequest = new DimissionRequest() ;
            RequestHandler rh01 = new HRRequestHandler() ;
            rh01.handle(dimissionRequest) ;
            
            Request addMoenyRequest = new AddMoneyRequest() ;
            RequestHandler rh02 = new PMRequestHandler(new DMRequestHandler()) ;
            rh02.handle(addMoenyRequest) ;
            
            
        }
    }
  • 相关阅读:
    ASP.NET 中JSON的序列化和反序列(抄的别人的,为了自己收藏)
    Javascript DOM动态添加表格
    Jquery应用技巧
    福克斯驾驶技巧(手动挡)
    肾盂分离来判断肾积水的程度
    降低车辆使用成本——节油
    青岛手精白重磅整合、横空出世申请长期置顶
    福克斯保养注意事项及驾驶技巧
    轻度肾积水怎么办?
    新手车主看过来 保养方法开车技巧全解析(求精)
  • 原文地址:https://www.cnblogs.com/liaokailin/p/3803487.html
Copyright © 2011-2022 走看看