`
ruishen
  • 浏览: 52044 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

职责链模式

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

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<Response> 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<Response> linkedListApprove(Request request, LinkedList<Response> responses){
      if (responses==null) {
         responses =new LinkedList<Response>();
      }
        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<Response> handler(Request request,LinkedList<Response> 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<Response> handler(Request request, LinkedList<Response> 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<Response> handler(Request request, LinkedList<Response> 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<Response> handler(Request request, LinkedList<Response> 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.sellHouse(am);
   buyer.buyHouse(am);
}
}
abstract class Mediator{
   //注册房源
   abstract void registerHouse(String msg);
   //用户买房
   abstract void  buyHouse(String name);
}
class HouseMediator extends Mediator{
   Seller seller;
   Buyer buyer;
   public HouseMediator(Seller seller, Buyer buyer) {
      super();
      this.seller = seller;
      this.buyer = buyer;
   }
 
   @Override
   void registerHouse(String msg) {
      System.out.println(msg);
      buyer.seeMsg(msg);
   }
 
   @Override
   void buyHouse(String name) {
      System.out.println(name+"相中了刘先生的房子,要买.");
      seller.inform(name);
   }
  
}
class  Seller{
   void sellHouse(HouseMediator mediator){
      mediator.registerHouse("我要往外卖一座2室一厅的90平米的房子,联系人:刘德华");
   }
   void inform(String name){
      System.out.println("刘先生,"+name+"要买您的房子.");
   }
}
class Buyer{
   void buyHouse(HouseMediator mediator) {
      mediator.buyHouse("小明");
   }
   void  seeMsg(String msg){
      System.out.println("我看到了一则消息:"+msg);
   }
}


中介者模式因为他会增加一个中介者对象,这个对象会帮助两个或者多个交互对象之间的复杂关系简化操作,这样避免了,可能会很混乱的操作,而这一切都被中介者给封装成了一个对一个的操作方式.

访问者模式

表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

package com.ruishenh.designPatter.action.visitor;
 
 
public class VisitorClient {
   static public void main(String[] args) {
      RobotStructure structure =new RobotStructure();
      structure.view(new PrintVisitor());
   }
}
//抽象访问者
abstract class Visitor {
   abstract void visit(Head element);
   abstract void visit(Arms element);
   abstract void visit(Body element);
   abstract void visit(Legs element);
}
//具体访问者
class PrintVisitor extends Visitor {
 
   @Override
   void visit(Head element) {
      System.out.println("我有一双"+element.getEyes());
   }
   @Override
   void visit(Arms element) {
      System.out.println("我有一双"+element.getHand());
   }
 
   @Override
   void visit(Body element) {
      System.out.println("我有一个"+element.getBelly());
   }
 
   @Override
   void visit(Legs element) {
      System.out.println("我有一双"+element.getFoot());
   }
}
abstract class Robot {
   abstract void accept(Visitor visitor);
}
class Head extends Robot {
   public Head(String eyes) {
      super();
      this.eyes = eyes;
   }
   String eyes;
   public String getEyes() {
      return eyes;
   }
   public void setEyes(String eyes) {
      this.eyes = eyes;
   }
   @Override
   void accept(Visitor visitor) {
      visitor.visit(this);
   }
}
class Arms extends Robot {
  
   public Arms(String hand) {
      super();
      this.hand = hand;
   }
   String hand;
   public String getHand() {
      return hand;
   }
   public void setHand(String hand) {
      this.hand = hand;
   }
   @Override
   void accept(Visitor visitor) {
      visitor.visit(this);
   }
}
class Body extends Robot {
  
   public Body(String belly) {
      super();
      this.belly = belly;
   }
   String belly;
   public String getBelly() {
      return belly;
   }
   public void setBelly(String belly) {
      this.belly = belly;
   }
   @Override
   void accept(Visitor visitor) {
      visitor.visit(this);
   }
}
class Legs extends Robot {
   public Legs(String foot) {
      super();
      this.foot = foot;
   }
   String foot;
   public String getFoot() {
      return foot;
   }
   public void setFoot(String foot) {
      this.foot = foot;
   }
   @Override
   void accept(Visitor visitor) {
      visitor.visit(this);
   }
}
//对象结构
class RobotStructure{
    private Head  head = new Head("明亮的双眼");
    private Arms  arms = new Arms("大大的双手");
    private Body  body   = new Body("圆圆的肚皮");
    private Legs  legs = new Legs("粗壮的双腿");
     void view(Visitor visitor) {
       head.accept(visitor);
       arms.accept(visitor);
       body.accept(visitor);
       legs.accept(visitor);
       System.out.println("我组成了超级机器人");
     }
}



访问者模式代码有点长,但是为了更好的阐述设计模式的定义

访问者模式需要在数据结构中注入进去一个访问者对象。通过回调,在具体的访问者中去实现相对应的业务逻辑操作。实现了数据结构和作用于结构上的操作之间的解耦合

分享到:
评论

相关推荐

    c++设计模式-行为型模式-解释器模式

    c++设计模式-行为型模式-解释器模式;qt工程;c++简单源码; 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式...

    L14-设计模式-行为型模式v21

    行为型模式(Behavioral Patterns)是设计模式的一种,关注对象行为功能上的抽象,从而提升对象在行为功能上的可拓展性,能以最少的代码变动完成功能的增减。 在设计模式中,行为型模式主要包括以下几种: 1. 迭代...

    设计模式课件大全

    设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    JAVA设计模式-原则和23种设计模式归纳总结

    然后,资源对23种设计模式进行了分类和总结,包括创建型模式、结构型模式和行为型模式。 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。共有5种,...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    设计模式分为三大类:创建型模式(如单例、工厂方法、抽象工厂)、结构型模式(如代理、装饰器、适配器)和行为型模式(如观察者、策略、命令)。这些模式都是在特定上下文中解决设计问题的模板,它们可以提高代码的...

    设计模式-实例代码

    设计模式通常分为三类:创建型、结构型和行为型。创建型模式关注对象的创建,结构型模式关注对象的组合,而行为型模式关注对象之间的交互。 工厂模式是创建型设计模式之一,它的主要目的是提供一个创建对象的接口,...

    Java设计模式----通俗易懂版

    这23种设计模式可以分为三类:创建型、结构型和行为型。 1. 创建型设计模式: - 单例模式:保证一个类只有一个实例,并提供全局访问点。 - 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    设计模式分为三类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory)和建造者模式(Builder)等,它们提供了一种灵活的方式来创建和管理对象,...

    软件设计模式--填空题+简答题(复习7).rar

    2. **设计模式分类**:设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代...

    设计模式实例源码

    这个压缩包文件名为“23种设计模式示例源码”,暗示其中包含了解决23种经典设计模式的具体实现代码,这对于初学者或者希望深入理解设计模式的开发者来说是一份宝贵的资源。下面将对这23种设计模式进行详细解释。 1....

    软件设计模式-java.pdf

    全书共9章,内容包括设计模式基础、创建型设计模式(共5种)、结构型设计模式(共7种)、行为型设计模式(共11种)、设计模式实验指导。每章包括教学目标、重点内容、模式的定义与特点、模式的结构与实现、模式的...

    设计模式(创建型、结构型、行为型)

    根据GoF(Gang of Four)的分类,设计模式可以分为三大类:创建型、结构型和行为型。 创建型模式是指在软件设计中,如何创建对象的模式。它主要解决了对象创建的问题,包括简单工厂、工厂方法、抽象工厂、单例、...

    Java 中的设计模式 - jdon

    设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见问题的经验和方法,为软件设计提供了可复用的解决方案。 在Java编程中,设计模式扮演着至关重要的角色,它们能够提高代码的可读性、可维护性和...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...

Global site tag (gtag.js) - Google Analytics