#107 Chain example JavaDoc improvements
This commit is contained in:
		@@ -1,22 +1,26 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Chain of Responsibility organizes request handlers (RequestHandler) into a
 | 
			
		||||
 * chain where each handler has a chance to act on the request on its turn. In
 | 
			
		||||
 * this example the king (OrcKing) makes requests and the military orcs
 | 
			
		||||
 * (OrcCommander, OrcOfficer, OrcSoldier) form the handler chain.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
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"));
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Chain of Responsibility organizes request handlers ({@link RequestHandler}) into a
 | 
			
		||||
 * chain where each handler has a chance to act on the request on its turn. In
 | 
			
		||||
 * this example the king ({@link OrcKing}) makes requests and the military orcs
 | 
			
		||||
 * ({@link OrcCommander}, {@link OrcOfficer}, {@link OrcSoldier}) form the handler chain.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
public class App {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Program entry point
 | 
			
		||||
	 * @param args command line args
 | 
			
		||||
	 */
 | 
			
		||||
	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"));
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,22 +1,27 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
public class OrcCommander extends RequestHandler {
 | 
			
		||||
 | 
			
		||||
	public OrcCommander(RequestHandler handler) {
 | 
			
		||||
		super(handler);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void handleRequest(Request req) {
 | 
			
		||||
		if (req.getRequestType().equals(RequestType.DEFEND_CASTLE)) {
 | 
			
		||||
			printHandling(req);
 | 
			
		||||
		} else {
 | 
			
		||||
			super.handleRequest(req);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return "Orc commander";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * OrcCommander
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class OrcCommander extends RequestHandler {
 | 
			
		||||
 | 
			
		||||
	public OrcCommander(RequestHandler handler) {
 | 
			
		||||
		super(handler);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void handleRequest(Request req) {
 | 
			
		||||
		if (req.getRequestType().equals(RequestType.DEFEND_CASTLE)) {
 | 
			
		||||
			printHandling(req);
 | 
			
		||||
		} else {
 | 
			
		||||
			super.handleRequest(req);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return "Orc commander";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,24 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Makes requests that are handled by the chain.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
public class OrcKing {
 | 
			
		||||
 | 
			
		||||
	RequestHandler chain;
 | 
			
		||||
 | 
			
		||||
	public OrcKing() {
 | 
			
		||||
		buildChain();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void buildChain() {
 | 
			
		||||
		chain = new OrcCommander(new OrcOfficer(new OrcSoldier(null)));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void makeRequest(Request req) {
 | 
			
		||||
		chain.handleRequest(req);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * OrcKing makes requests that are handled by the chain.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
public class OrcKing {
 | 
			
		||||
 | 
			
		||||
	RequestHandler chain;
 | 
			
		||||
 | 
			
		||||
	public OrcKing() {
 | 
			
		||||
		buildChain();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void buildChain() {
 | 
			
		||||
		chain = new OrcCommander(new OrcOfficer(new OrcSoldier(null)));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void makeRequest(Request req) {
 | 
			
		||||
		chain.handleRequest(req);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,23 +1,28 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
public class OrcOfficer extends RequestHandler {
 | 
			
		||||
 | 
			
		||||
	public OrcOfficer(RequestHandler handler) {
 | 
			
		||||
		super(handler);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void handleRequest(Request req) {
 | 
			
		||||
		if (req.getRequestType().equals(RequestType.TORTURE_PRISONER)) {
 | 
			
		||||
			printHandling(req);
 | 
			
		||||
		} else {
 | 
			
		||||
			super.handleRequest(req);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return "Orc officer";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * OrcOfficer
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class OrcOfficer extends RequestHandler {
 | 
			
		||||
 | 
			
		||||
	public OrcOfficer(RequestHandler handler) {
 | 
			
		||||
		super(handler);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void handleRequest(Request req) {
 | 
			
		||||
		if (req.getRequestType().equals(RequestType.TORTURE_PRISONER)) {
 | 
			
		||||
			printHandling(req);
 | 
			
		||||
		} else {
 | 
			
		||||
			super.handleRequest(req);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return "Orc officer";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,22 +1,27 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
public class OrcSoldier extends RequestHandler {
 | 
			
		||||
 | 
			
		||||
	public OrcSoldier(RequestHandler handler) {
 | 
			
		||||
		super(handler);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void handleRequest(Request req) {
 | 
			
		||||
		if (req.getRequestType().equals(RequestType.COLLECT_TAX)) {
 | 
			
		||||
			printHandling(req);
 | 
			
		||||
		} else {
 | 
			
		||||
			super.handleRequest(req);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return "Orc soldier";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * OrcSoldier
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class OrcSoldier extends RequestHandler {
 | 
			
		||||
 | 
			
		||||
	public OrcSoldier(RequestHandler handler) {
 | 
			
		||||
		super(handler);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void handleRequest(Request req) {
 | 
			
		||||
		if (req.getRequestType().equals(RequestType.COLLECT_TAX)) {
 | 
			
		||||
			printHandling(req);
 | 
			
		||||
		} else {
 | 
			
		||||
			super.handleRequest(req);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return "Orc soldier";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,33 +1,38 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return getRequestDescription();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Request
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
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;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return getRequestDescription();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,23 +1,28 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
public abstract class RequestHandler {
 | 
			
		||||
 | 
			
		||||
	private RequestHandler next;
 | 
			
		||||
 | 
			
		||||
	public RequestHandler(RequestHandler next) {
 | 
			
		||||
		this.next = next;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void handleRequest(Request req) {
 | 
			
		||||
		if (next != null) {
 | 
			
		||||
			next.handleRequest(req);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	protected void printHandling(Request req) {
 | 
			
		||||
		System.out.println(this + " handling request \"" + req + "\"");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public abstract String toString();
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * RequestHandler
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public abstract class RequestHandler {
 | 
			
		||||
 | 
			
		||||
	private RequestHandler next;
 | 
			
		||||
 | 
			
		||||
	public RequestHandler(RequestHandler next) {
 | 
			
		||||
		this.next = next;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void handleRequest(Request req) {
 | 
			
		||||
		if (next != null) {
 | 
			
		||||
			next.handleRequest(req);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	protected void printHandling(Request req) {
 | 
			
		||||
		System.out.println(this + " handling request \"" + req + "\"");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public abstract String toString();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,12 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
public enum RequestType {
 | 
			
		||||
 | 
			
		||||
	DEFEND_CASTLE, TORTURE_PRISONER, COLLECT_TAX
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * RequestType enumeration
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public enum RequestType {
 | 
			
		||||
 | 
			
		||||
	DEFEND_CASTLE, TORTURE_PRISONER, COLLECT_TAX
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,19 @@
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.chain.App;
 | 
			
		||||
 | 
			
		||||
public class AppTest {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void test() {
 | 
			
		||||
		String[] args = {};
 | 
			
		||||
		App.main(args);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
package com.iluwatar.chain;
 | 
			
		||||
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.chain.App;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Application test
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class AppTest {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void test() {
 | 
			
		||||
		String[] args = {};
 | 
			
		||||
		App.main(args);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user