二十三种设计模式之责任链模式
2017-08-14 19:42
288 查看
责任链模式:如果有多个对象都机会处理请求,责任链可使请求的发送者和接受者解耦,请求沿着责任链解耦,请求沿着责任链传递,直到有一个对象处理他位置.
public class PurchaseRequest {
private int type = 0;
private int Number = 0;
private float price = 0;
private int ID = 0;
public PurchaseRequest(int type, int Number, float price) {
super();
this.type = type;
this.Number = Number;
this.price = price;
}
public int getType() {
return type;
}
public float getSum() {
return Number*price;
}
public int getID() {
return (int)(Math.random()*1000);
}
}
public abstract class Approver {
Approver successor;
String Name;
public Approver(String Name) {
this.Name = Name;
}
public abstract void ProcessRequest(PurchaseRequest request);
public void SetSuccessor(Approver successor){
this.successor = successor;
}
}
public class GroupApprover extends Approver{
public GroupApprover(String Name) {
super(Name+" GroupLeader");
}
@Override
public void ProcessRequest(PurchaseRequest request) {
if(request.getSum()<5000){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}
}
public class DepartmentApprover extends Approver{
public DepartmentApprover(String Name) {
super(Name+" DepartmentLeader");
}
@Override
public void ProcessRequest(PurchaseRequest request) {
if((5000<=request.getSum()) && (request.getSum()<10000)){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}
}
public class VicePresidentApprover extends Approver {
public VicePresidentApprover(String Name) {
super(Name+" Vice President");
}
@Override
public void ProcessRequest(PurchaseRequest request) {
if((10000<=request.getSum()) && (request.getSum()<50000)){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}
}
public class PresidentApprover extends Approver{
public PresidentApprover(String Name) {
super(Name+"President");
// TODO Auto-generated constructor stub
}
@Override
public void ProcessRequest(PurchaseRequest request) {
// TODO Auto-generated method stub
if(50000<=request.getSum()){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}
}
public class Client {
public Client() {
// TODO Auto-generated constructor stub
}
public PurchaseRequest sendRequest(int Type,int Number,float price){
return new PurchaseRequest(Type, Number, price);
}
}
public class MainTest {
public static void main(String[] args) {
Client mClient = new Client();
Approver GroupLeader = new GroupApprover("Tom");
Approver DepratLeader = new DepartmentApprover("Jerry");
Approver VicePresident = new VicePresidentApprover("Kate");
Approver President = new PresidentApprover("Bush");
GroupLeader.SetSuccessor(DepratLeader);
DepratLeader.SetSuccessor(VicePresident);
VicePresident.SetSuccessor(President);
President.SetSuccessor(GroupLeader);
GroupLeader.ProcessRequest(mClient.sendRequest(1, 100, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(2, 200, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(3, 300, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(4, 400, 140));
// VicePresident.ProcessRequest(mClient.sendRequest(1, 100, 40));
// VicePresident.ProcessRequest(mClient.sendRequest(2, 200, 40));
// VicePresident.ProcessRequest(mClient.sendRequest(3, 300, 40));
// VicePresident.ProcessRequest(mClient.sendRequest(4, 400, 140));
}
}
public class PurchaseRequest {
private int type = 0;
private int Number = 0;
private float price = 0;
private int ID = 0;
public PurchaseRequest(int type, int Number, float price) {
super();
this.type = type;
this.Number = Number;
this.price = price;
}
public int getType() {
return type;
}
public float getSum() {
return Number*price;
}
public int getID() {
return (int)(Math.random()*1000);
}
}
public abstract class Approver {
Approver successor;
String Name;
public Approver(String Name) {
this.Name = Name;
}
public abstract void ProcessRequest(PurchaseRequest request);
public void SetSuccessor(Approver successor){
this.successor = successor;
}
}
public class GroupApprover extends Approver{
public GroupApprover(String Name) {
super(Name+" GroupLeader");
}
@Override
public void ProcessRequest(PurchaseRequest request) {
if(request.getSum()<5000){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}
}
public class DepartmentApprover extends Approver{
public DepartmentApprover(String Name) {
super(Name+" DepartmentLeader");
}
@Override
public void ProcessRequest(PurchaseRequest request) {
if((5000<=request.getSum()) && (request.getSum()<10000)){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}
}
public class VicePresidentApprover extends Approver {
public VicePresidentApprover(String Name) {
super(Name+" Vice President");
}
@Override
public void ProcessRequest(PurchaseRequest request) {
if((10000<=request.getSum()) && (request.getSum()<50000)){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}
}
public class PresidentApprover extends Approver{
public PresidentApprover(String Name) {
super(Name+"President");
// TODO Auto-generated constructor stub
}
@Override
public void ProcessRequest(PurchaseRequest request) {
// TODO Auto-generated method stub
if(50000<=request.getSum()){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}
}
public class Client {
public Client() {
// TODO Auto-generated constructor stub
}
public PurchaseRequest sendRequest(int Type,int Number,float price){
return new PurchaseRequest(Type, Number, price);
}
}
public class MainTest {
public static void main(String[] args) {
Client mClient = new Client();
Approver GroupLeader = new GroupApprover("Tom");
Approver DepratLeader = new DepartmentApprover("Jerry");
Approver VicePresident = new VicePresidentApprover("Kate");
Approver President = new PresidentApprover("Bush");
GroupLeader.SetSuccessor(DepratLeader);
DepratLeader.SetSuccessor(VicePresident);
VicePresident.SetSuccessor(President);
President.SetSuccessor(GroupLeader);
GroupLeader.ProcessRequest(mClient.sendRequest(1, 100, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(2, 200, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(3, 300, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(4, 400, 140));
// VicePresident.ProcessRequest(mClient.sendRequest(1, 100, 40));
// VicePresident.ProcessRequest(mClient.sendRequest(2, 200, 40));
// VicePresident.ProcessRequest(mClient.sendRequest(3, 300, 40));
// VicePresident.ProcessRequest(mClient.sendRequest(4, 400, 140));
}
}
相关文章推荐
- 23种设计模式之责任链模式
- 二十四种设计模式:责任链模式(Chain of Responsibility Pattern)
- 设计模式->行为型模式->责任链模式
- 设计模式:责任链模式
- 设计模式-责任链模式
- 读书笔记之 - javascript 设计模式 - 责任链模式
- 设计模式—责任链模式
- c++设计模式之责任链模式
- Java二十三种设计模式
- 二十三种设计模式之创建型模式之抽象工厂
- 设计模式——责任链模式
- 二十三种设计模式之原型模式
- java设计模式第5弹--责任链模式
- 【设计模式】责任链模式
- 重学java23种设计模式(13)责任链模式
- 设计模式-责任链模式(Java)
- 二十三种设计模式(java版)之Factory Method
- 设计模式--责任链模式
- 设计模式-责任链模式
- Java设计模式(5)之责任链模式学习总结