设计模式-行为型模式总结实例(三)(一)

2014-11-24 03:21:52 · 作者: · 浏览: 0

职责链模式

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

package com.ruishenh.designPatter.action.chainOfResp;
 
import java.util.LinkedList;
 
public class ChainOfRespClient {
   public static void main(String[] args) {
      GroupLeader gl=new GroupLeader();
      Manager mgr=new Manager();
      CTO cto=new CTO();
      gl.setNextLead(mgr);
      mgr.setNextLead(cto);
      Request request = null;
      Response response;
      LinkedList
  
    ress;
     
      //按照模式来走只能一个处理对象来处理
      request=new Request(1, "小明", "领老婆去医院");
      response=gl.approve(request);
      System.out.println(response);
      //按照模式来走只能一个处理对象来处理
      request=new Request(10, "小明", "请婚假");
      response=gl.approve(request);
      System.out.println(response);
     
     
      //一般现实业务正常流程所有领导都要签
     
      ress=gl.linkedListApprove(request,null);
      for (Response response2 : ress) {
         System.out.println(response2);
      }
     
   }
}
 
class Request{
   public Request(int leaveDay, String name, String reason) {
      super();
      this.leaveDay = leaveDay;
      this.name = name;
      this.reason = reason;
   }
   int leaveDay;
   String name;
   String reason;
}
class Response{
   public Response(boolean approved, String remark,String approveName) {
      super();
      this.approved = approved;
      this.remark = remark;
      this.approveName=approveName;
   }
   boolean approved;
   String approveName;
   String remark;
   @Override
   public String toString() {
      return "申请通过:"+approved+",备注:"+this.remark+",批准人:"+approveName;
   }
}
abstract class Position{
  
   private Position nextLead;
  
   Response approve(Request request){
       Response response = null; 
        
           if(canHandler(request)){ 
               response = this.handler(request); 
           }else{ 
             response=  this.nextLead.approve(request); 
           } 
           return response; 
   }
  
   LinkedList
   
     linkedListApprove(Request request, LinkedList
    
      responses){ if (responses==null) { responses =new LinkedList
     
      (); } responses=this.handler(request,responses); return nextLead==null responses:this.nextLead.linkedListApprove(request,responses); } abstract boolean canHandler(Request request); abstract Response handler(Request request); abstract LinkedList
      
        handler(Request request,LinkedList
       
         response); public void setNextLead(Position nextLead) { this.nextLead = nextLead; } } class GroupLeader extends Position { @Override boolean canHandler(Request request) { if (request.leaveDay<=1) { return true; } return false; } @Override Response handler(Request request) { return new Response(true,"通过","主管"); } @Override LinkedList
        
          handler(Request request, LinkedList
         
           response) { response.add(new Response(true,"通过","主管")); return response; } } class Manager extends Position{ @Override boolean canHandler(Request request) { if (request.leaveDay<=5) { return true; } return false; } @Override Response handler(Request request) { return new Response(true,"通过","经理"); } @Override LinkedList
          
            handler(Request request, LinkedList
           
             response) { response.add(new Response(true,"通过","经理")); return response; } } class CTO extends Position{ @Override boolean canHandler(Request request) { return true; } @Override Response handler(Request request) { return new Response(true,"通过","总监"); } @Override LinkedList
            
              handler(Request request, LinkedList
             
               response) { response.add(new Response(true,"通过","总监")); return response; } }
             
            
           
          
         
        
       
      
     
    
   
  



职责链模式核心任务就是把所有的有可能处理这个请求的接受者连接在一起,当发起请求处理后,会沿着这个链总有一个对象会处理,处理完毕后,直接返回.可能是上边例子取的不恰当,所以衍生了链表处理的请求.

中介者模式

又叫调停者模式 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互

package com.ruishenh.designPatter.action.mediator;
 
public class MediatorClient {
public static void main(String[] args) {
   Seller seller=new Seller();
   Buyer buyer =new Buyer();
   HouseMediator am =new HouseMediator(seller,buyer);
   seller.sellH