When many objects have the opportunity to process the request, so as to avoid coupling between the request sender and the receiver, connect the object into a chain and process the request along the chain, until an object processes it.
Figure:
Example of asking for a raise:
// Apply for class Request {// apply for category private string requestType; public string RequestType {get {return requestType;} set {requestType = value ;}// apply for private string requestContent; public string RequestContent {get {return requestContent;} set {requestContent = value ;}/// quantity requested private int number; public int Number {get {return number ;} set {number = value ;}}// manager abstract class Manag Er {protected string name; protected Manager superior; // The upper-level public Manager (string name) of the Manager {this. name = name;} public void setsuperior (Manager superior) {this. superior = superior;} // Request abstract public void RequestApplications (request Request);} // Manager class CommonManager: Manager {public CommonManager (string name): base (name) {} public override void RequestApplications (Request request) {// Throw new NotImplementedException (); if (request. requestType = "leave" & request. number <= 2) {Console. writeLine ("{0 }:{ 1} quantity {2} approved", name, request. requestContent, request. number);} else {if (superior! = Null) {superior. requestApplications (request) ;}}// the Director also inherits the Manager class Majordomo: Manager {public Majordomo (string name): base (name) {} public override void RequestApplications (Request request) {// throw new NotImplementedException (); \ if (request. requestType = "leave" & request. number <= 5) {Console. writeLine ("{0 }:{ 1} quantity {2} approved", name, request. requestContent, request. number);} else {if (s Uperior! = Null) {superior. requestApplications (request) ;}}// general Manager class GeneralManager: Manager {public GeneralManager (string name): base (name) {} public override void RequestApplications (Request request) {// throw new NotImplementedException (); if (request. requestType = "leave") {Console. writeLine ("{0 }:{ 1} quantity {2} approved", name, request. requestContent, request. number);} else if (request. requestType = "salary increase" & request. number <= 500) {Console. writeLine ("{0 }:{ 1} quantity {2} approved", name, request. requestContent, request. number);} else {Console. writeLine ("{0 }:{ 1} count {2}", name, request. requestContent, request. number) ;}} class Program {static void Main (string [] args) {CommonManager jinli = new CommonManager ("gionee "); majordomo zongjian = new Majordomo ("Director"); GeneralManager zhongjingli = new GeneralManager ("General Manager"); jinli. setsuperior (zongjian); zongjian. setsuperior (zhongjingli); Request request = new Request (); request. requestType = "leave"; request. requestContent = "food for leave"; request. number = 4; jinli. requestApplications (request); Request request2 = new Request (); request2.RequestType = ""; request2.RequestContent = ""; request2.Number = 4; jinli. requestApplications (request2); Request request3 = new Request (); request3.RequestType = "salary increase"; request3.RequestContent = "food Request salary increase"; jinli. requestApplications (request3); Request request4 = new Request (); request4.RequestType = "salary increase"; request4.RequestContent = "food Request salary increase"; request4.Number = 1000; jinli. requestApplications (request4); Console. read ();}}
Running result: