java设计模式进阶_chain

原创 2016年08月29日 17:23:31

这里写图片描述



public enum RequestType {

    DEFEND_CASTLE,
    TORTURE_PRISONER,
    COLLECT_TAX
}



//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : RequestHandler.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




public abstract class RequestHandler {
    private RequestHandler next;
    public RequestHandler(RequestHandler next) {
        this.next = next;
    }

    public void handleRequest(Request request) {
        if(next != null)
        {
            next.handleRequest(request);
        }
    }

    protected void printHandling(Request request) {
        System.out.println(this + " handling request \"" + request + "\"");
    }

    public abstract String toString();
}


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : OrcCommander.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




public class OrcCommander extends RequestHandler {
    public OrcCommander(RequestHandler next) {
        super(next);
    }

    public void handleRequest(Request request) {
        if(request.getRequestType().equals(RequestType.DEFEND_CASTLE)){
            printHandling(request);
        } else {
            super.handleRequest(request);
        }
    }

    public String toString() {
        return "Orc commander";
    }
}
//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : OrcOfficer.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




public class OrcOfficer extends RequestHandler {

    public OrcOfficer(RequestHandler next) {
        super(next);
    }

    public void handleRequest(Request request) {
        if(request.getRequestType().equals(RequestType.TORTURE_PRISONER)) {
            printHandling(request);
        } else {
            super.handleRequest(request);
        }
    }

    public String toString() {
        return "Orc officer";
    }
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : OrcSoldler.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




public class OrcSoldler extends RequestHandler {

    public OrcSoldler(RequestHandler next) {
        super(next);
    }

    public void handleRequest(Request request) {
        if(request.getRequestType().equals(RequestType.COLLECT_TAX)) {
            printHandling(request);
        } else {
            super.handleRequest(request);
        }
    }

    public String toString() {
        return "Orc soldier";
    }
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : OrcKing.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




public class OrcKing {
    public RequestHandler chain;

    public OrcKing() {
        buildChain();
    }

    private void buildChain() {
        chain = new OrcCommander(new OrcOfficer(new OrcSoldler(null)));
    }

    public void makeRequest(Request request) {
        chain.handleRequest(request);
    }
}


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Request.java
//  @ Date : 2016/8/29
//  @ Author : 
//
//




public class Request {
    private String requestDescription;
    private RequestType requestType;

    public Request(RequestType requestType, String requestDescription) {
        this.setRequestType(requestType);
        this.setRequestDescription(requestDescription);
    }

    public String getRequestDescription() {
        return requestDescription;
    }

    public void setRequestDescription(String requestDescription) {
        this.requestDescription = requestDescription;
    }

    public RequestType getRequestType() {
        return requestType;
    }

    public void setRequestType(RequestType requestType) {
        this.requestType = requestType;
    }

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


public class App {

    public static void main(String[] args) {
        OrcKing king = new OrcKing();
        king.makeRequest(new Request(RequestType.DEFEND_CASTLE, "defend castle"));
        king.makeRequest(new Request(RequestType.TORTURE_PRISONER, "torture prisoner"));
        king.makeRequest(new Request(RequestType.COLLECT_TAX, "collect tax"));
    }
}

/*Orc commander handling request "defend castle"
Orc officer handling request "torture prisoner"
Orc soldier handling request "collect tax"

*/




版权声明:本文为博主原创文章,未经博主允许不得转载。

Java设计模式----责任链模式

简述:     前端时间再看一些类库的源码,发现责任链模式的强大之处,尤其是和建造者模式的结合后强大的动态可扩展性更是牛逼的一塌糊涂。接下来赶紧了解一下吧!     我们先来了解一下什么是责任...
  • u012810020
  • u012810020
  • 2017年05月05日 12:50
  • 429

【设计模式】Chain of Responsibility 责任链式模式

责任链行为模式是行为模式的一种。行为模式涉及到算法和对象间职责的分配,行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。行为模式分为 :Template Method 模板方法 和 Inter...
  • yxhuang2008
  • yxhuang2008
  • 2017年05月19日 23:38
  • 192

java中22种设计模式

设计模式主要分三个类型:创建型、结构型和行为型。 其中创建型有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract F...
  • u012129558
  • u012129558
  • 2016年05月05日 14:47
  • 749

设计模式经典书籍推荐

很多朋友问学习设计模式的书籍,老大沧浪在FAQ里有个简短的叙述,这里我引申一下,说说自己看过或者翻过的设计模式书籍,由于水平所限,肯定有不对的地方,希望大家指正,如果大家看到好的模式相关书籍,希望能回...
  • a316212802
  • a316212802
  • 2016年03月23日 10:35
  • 11616

java几种常用设计模式简单示例

1.单例设计模式        所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生。具体实现步骤如下:       (1) 将采用...
  • haoxingfeng
  • haoxingfeng
  • 2013年06月27日 21:04
  • 71853

为什么设计模式java实现的书比较多,C++却很少.

我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?   (1)C++内存需要自己管理,所以有些模式在C++里使用不是那么...
  • djd1234567
  • djd1234567
  • 2015年10月25日 18:54
  • 1444

23种设计模式介绍以及在Java中的实现

文本详细总结了23种设计模式以及他们如何应用到java中,并提供了大量的示例代码。 文章中的示例源码在github上:https://github.com/anxpp/JavaDesignPatter...
  • anxpp
  • anxpp
  • 2016年04月24日 01:06
  • 24364

Java开发中的23种设计模式详解

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模...
  • doymm2008
  • doymm2008
  • 2013年10月28日 09:22
  • 96446

学习Java设计模式的10条建议

设计模式在整个Java的学习路线图中有着承上启下的作用。
  • printj
  • printj
  • 2014年07月28日 15:11
  • 1009

Java中的24种设计模式与7大原则

一、创建型模式 1、抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类. 2、生成器模式(Builder p...
  • wu_zz
  • wu_zz
  • 2017年01月15日 22:47
  • 492
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式进阶_chain
举报原因:
原因补充:

(最多只允许输入30个字)