鍐欏湪鍓嶉潰锛岃褰曞涔犺璁℃ā寮忕殑绗旇锛屾彁楂樿璁℃ā寮忕殑鐏垫椿杩愮敤瀛︿範鍦板潃https://www.bilibili.com/video...https://www.bilibili.com/video...鍙傝€冩枃绔爃ttp://c.biancheng.net/view/1...椤圭洰婧愮爜https://gitee.com/zhuang-kang/DesignPattern27銆佽矗浠婚摼妯″紡27.1璐d换閾炬ā寮忕殑瀹氫箟鍜岀壒鐐硅矗浠婚摼妯″紡鐨勫畾涔夛細涓轰簡閬垮厤璇锋眰鍙戦€佽€呬笌澶氫釜璇锋眰澶勭悊鑰呰€﹀悎锛屾墍鏈夎姹傚鐞嗚€呴€氳繃涓婁竴涓璞¤浣忎笅涓€涓璞¢摼鎺ユ垚閾炬潯锛涘綋璇锋眰鍙戠敓鏃讹紝璇锋眰鍙互娌跨潃杩欐潯閾句紶閫掞紝鐩村埌涓€涓璞″鐞嗗畠銆傛敞鎰忥細璐d换閾炬ā寮忎篃绉颁负璐d换閾炬ā寮忋€傚湪璐d换閾炬ā寮忎笅锛屽鎴风鍙渶瑕佸悜璐d换閾惧彂閫佽姹傦紝涓嶉渶瑕佸叧蹇冭姹傜殑澶勭悊缁嗚妭鍜岃姹傜殑浼犻€掕繃绋嬶紝璇锋眰浼氳嚜鍔ㄤ紶閫掋€傚洜姝わ紝璐d换閾惧皢璇锋眰鐨勫彂閫佽€呬笌璇锋眰鐨勫鐞嗚€呭垎绂汇€傝矗浠婚摼妯″紡鏄竴绉嶅璞?琛屼负妯″紡锛屽叾涓昏浼樼偣濡備笅銆傚噺灏戝璞′箣闂寸殑鑰﹀悎銆傝繖绉嶆ā寮忎娇寰椾竴涓璞′笉闇€瑕佺煡閬撳摢涓璞″鐞嗗畠鐨勮姹傚拰閾剧殑缁撴瀯锛屽苟涓斿彂閫佽€呭拰鎺ユ敹鑰呬笉闇€瑕佸郊姝ゆ湁鏄庣‘鐨勪俊鎭€傚寮虹殑绯荤粺鍙墿灞曟€с€傚彲浠ユ牴鎹渶瑕佸鍔犳柊鐨勮姹傚鐞嗙被锛屾弧瓒冲紑闂師鍒欍€傚寮轰簡涓哄璞″垎閰嶈亴璐g殑鐏垫椿鎬с€傚綋宸ヤ綔娴佸彂鐢熷彉鍖栨椂锛岄摼涓殑鎴愬憳鍙互鍔ㄦ€佸彉鍖栨垨椤哄簭璋冩暣锛岃亴璐d篃鍙互鍔ㄦ€佸鍔犳垨鍒犻櫎銆傝矗浠婚摼绠€鍖栦簡瀵硅薄涔嬮棿鐨勮繛鎺ャ€傛瘡涓璞″彧闇€瑕佷繚鐣欏鍏跺悗缁ц€呯殑寮曠敤锛岃€屼笉鏄鎵€鏈夊叾浠栧鐞嗙▼搴忕殑寮曠敤锛岃繖閬垮厤浜嗕娇鐢ㄥぇ閲忕殑if鎴杋f...else璇彞銆傚叡鍚岃矗浠汇€傛瘡涓被鍙渶瑕佸鐞嗗畠搴旇澶勭悊鐨勫伐浣滐紝鎶婁笉搴旇澶勭悊鐨勫伐浣滀氦缁欎笅涓€涓璞″幓瀹屾垚锛屾槑纭瘡涓被鐨勮亴璐h寖鍥达紝绗﹀悎绫荤殑鍗曚竴鑱岃矗鍘熷垯銆傚畠鐨勪富瑕佺己鐐瑰涓嬨€備笉鑳戒繚璇佹瘡涓姹傞兘浼氬緱鍒板鐞嗐€傜敱浜庤姹傛病鏈夋槑纭殑鎺ユ敹鑰咃紝鍥犳鏃犳硶淇濊瘉瀹冧細琚鐞嗭紝骞朵笖璇锋眰鍙兘浼氫竴鐩存部鐫€閾惧悜涓嬩紶閫掕€屼笉琚鐞嗐€備笌杈冮暱鐨勮矗浠婚摼鐩告瘮锛岃姹傜殑澶勭悊鍙兘娑夊強澶氫釜澶勭悊瀵硅薄锛岀郴缁熸€ц兘浼氬彈鍒颁竴瀹氬奖鍝嶃€傝矗浠婚摼寤虹珛鐨勫悎鐞嗘€т緷璧栦簬瀹㈡埛绔紝澧炲姞浜嗗鎴风鐨勫鏉傛€э紝骞朵笖鍙兘鍥犺矗浠婚摼鐨勮缃笉姝g‘鑰屽鑷寸郴缁熼敊璇紝濡傚惊鐜皟鐢ㄣ€?7.2璐d换閾炬ā寮忕殑缁撴瀯鍜屽疄鐜?7.2.1璐d换閾炬ā寮忕殑缁撴瀯鎶借薄澶勭悊鍣紙Handler锛変綔鐢細瀹氫箟浜嗕竴涓鐞嗚姹傜殑鎺ュ彛锛屽寘鎷娊璞$殑澶勭悊鏂规硶鍜屼竴涓悗缁殑杩炴帴銆傚叿浣撳鐞嗙▼搴忥紙ConcreteHandler锛変綔鐢細瀹炵幇鎶借薄澶勭悊绋嬪簭鐨勫鐞嗘柟娉曪紝鍒ゆ柇璇锋眰鏄惁鍙互澶勭悊锛屽鏋滃彲浠ュ鐞嗚姹傦紝鍒欒繘琛屽鐞嗭紝鍚﹀垯灏嗚姹備紶閫掔粰瀹冪殑鍚庣户鑰呫€傚鎴风绫伙紙Client锛変綔鐢細鍒涘缓涓€涓鐞嗛摼锛屽悜閾惧ご鐨勫叿浣撳鐞嗗櫒瀵硅薄鎻愪氦璇锋眰銆傚畠涓嶅叧蹇冭姹傜殑澶勭悊缁嗚妭鍜屼紶閫掕繃绋嬨€?7.2.1浠g爜瀹炴柦寮€鍙戣鍋囨祦绋嬫帶鍒剁郴缁熴€傝鍋囦笉瓒?澶╃殑锛屽彧闇€寰佸緱缁勯暱鍚屾剰鍗冲彲锛涜鍋?-3澶╋紝闇€缁忛儴闂ㄧ粡鐞嗗悓鎰忥紱濡傛灉璇峰亣3-7澶╋紝闇€瑕佹€荤粡鐞嗘壒鍑嗐€傚叧绯荤被鍥綥eaveRequestpackagecom.zhuang.responsibility;/***@ClassnameLeaveRequest*@Description绂诲紑澶囨敞*@Date2021/3/3116:21*@Createdbydell*/publicclassLeaveRequest{//nameprivateStringname;//璇峰亣澶╂暟privateintnum;//淇濈暀鍐呭privateStringcontent;publicLeaveRequest(Stringname,intnum,Stringcontent){this.name=name;杩欎釜.num=num;this.content=鍐呭锛泒publicStringgetName(){杩斿洖鍚嶇О锛泒publicintgetNum(){杩斿洖鏁板瓧锛泒publicStringgetContent(){杩斿洖鍐呭锛泒}Handlerpackagecom.zhuang.responsibility;/***@ClassnameHandler*@Description鐢ㄤ竴鍙ヨ瘽鎻忚堪绫荤殑浣滅敤*@Date2021/3/3116:23*@Createdbydell*/publicabstractclassHandler{鍙椾繚鎶ょ殑鏈€缁堥潤鎬乮ntNUM_ONE=1;鍙椾繚鎶ょ殑鏈€缁堥潤鎬乮ntNUM_THREE=3锛涘彈淇濇姢鐨勬渶缁堥潤鎬乮ntNUM_SEVEN=7锛涚鏈夋暣鏁板紑濮嬶紱绉佹湁intnumEnd锛?/棰嗗鑰呰繕鏈夐瀵艰€卲rivateHandlernextHandler;//璁剧疆浼戝亣澶╂暟鑼冨洿publicHandler(intnumStart){this.numStart=numStart;}//璁剧疆浼戝亣澶╂暟鑼冨洿publicHandler(intnumStart,intnumEnd){this.numStart=numStart;this.numEnd=numEnd;}//璁剧疆涓婄骇leaderpublicvoidsetNextHandler(HandlernextHandler){this.nextHandler=nextHandler;}//鎻愪氦璇峰亣鏉ublicfinalvoidsubmit(LeaveRequestleaveRequest){if(this.numStart==0){return;}//璇峰亣澶╂暟婊¤冻leader鐨勫鐞嗚姹俰f(leaveRequest.getNum()>=this.numStart){this.handleLeave(leaveRequest);//濡傛灉鏈変笂绾т笖璇峰亣澶╂暟瓒呰繃褰撳墠leader鐨勫鐞嗚寖鍥磇f(this.nextHandler!=null&&leaveRequest.getNum()>numEnd){//缁х画鎻愪氦this.nextHandler.submit(绂诲紑璇锋眰锛夛紱}else{System.out.println("杩涚▼缁撴潫锛侊紒锛?);}}}//鍚勭骇棰嗗鍔炵悊璇峰亣鏉rotectedabstractvoidhandleLeave(LeaveRequestleave);}GroupLeaderpackagecom.zhuang.responsibility;/***@ClassnameGroupLeader*@Description缁勯暱鐝骇*@Date2021/3/3116:33*@Createdbydell*/publicclassGroupLeaderextendsHandler{//1-3daysfakepublicGroupLeader(){super(Handler.NUM_ONE,Handler.NUM_THREE);}@OverrideprotectedvoidhandleLeave(LeaveRequestleave){System.out.println(leave.getName()+"绂诲紑"+leave.getNum()+"澶╂暟"+leave.getContent()+"!");System.out.println("缁勯暱鍚屾剰锛氬悓鎰忥紒");}}Managerpackagecom.zhuang.responsibility;/***@ClassnameManager*@Description閮ㄩ棬缁忕悊绫?@Date2021/3/3116:36*@Createdbydell*/publicclassManagerextendsHandler{//3-7澶╁亣鍏叡Manager(){super(Handler.NUM_THREE,Handler.NUM_SEVEN);}@OverrideprotectedvoidhandleLeave(LeaveRequestleave){System.out.println(leave.getName()+"Leave"+leave.getNum()+"days,"+leave.getContent()+"!");System.out.println("閮ㄩ棬缁忕悊鎵瑰噯锛氬悓鎰忥紒");}}GeneralManagerpackagecom.zhuang.responsibility;/***@ClassnameGeneralManager*@DescriptionGeneralmanagerclass*@Date2021/3/3116:38*@Createdbydell*/publicclassGeneralManagerextendsHandler{//鍋囪秴杩?澶﹑ublicGeneralManager(){super(Handler.NUM_THREE,Handler.NUM_SEVEN);}@OverrideprotectedvoidhandleLeave(LeaveRequestleave){System.out.println(leave.getName()+"leave"+leave.getNum()+"day",+leave.getContent()+"!");System.out.println("鎬荤粡鐞嗘壒鍑嗭細鍚屾剰锛?);}}Clientpackagecom.zhuang.responsibility;/***@ClassnameClient*@Description璐d换閾炬ā寮忔祴璇曠被*@Date2021/3/3116:39*@Createdbydell*/publicclassClient{publicstaticvoidmain(String[]args){//璇峰亣璇锋眰LeaveRequestleave=newLeaveRequest("灏忓簞",3,"鍑哄幓鏃呮父");//EveryoneLeaderManagermanager=newManager();GroupLeadergroupLeader=newGroupLeaderr();GeneralManagergeneralManager=newGeneralManager();/*缁勯暱鐨勮€佹澘鏄粡鐞嗙粡鐞嗙殑鑰佹澘鏄€荤粡鐞?/groupLeader.setNextHandler(manager);manager.setNextHandler(generalManager);//鎻愪氦groupLeader.submit(leave);}}27.3璐d换閾炬ā寮忕殑搴旂敤鍦烘櫙澶氫釜瀵硅薄鍙互澶勭悊涓€涓姹傦紝浣嗘槸鍝釜瀵硅薄鏉ュ鐞嗚繖涓姹傚皢鍦ㄨ繍琛屾椂鑷姩纭畾銆傚彲浠ュ姩鎬佹寚瀹氫竴缁勫璞℃潵澶勭悊璇锋眰锛屾垨鑰呭彲浠ユ坊鍔犱竴涓柊鐨勫鐞嗗櫒銆傞渶瑕佸湪涓嶆樉寮忔寚瀹氳姹傚鐞嗙▼搴忕殑鎯呭喌涓嬪悜澶氫釜澶勭悊绋嬪簭涔嬩竴鎻愪氦璇锋眰銆傚啓鍦ㄦ渶鍚庡鏋滄垜鐨勬枃绔犲浣犳湁鐢紝璇风粰鎴戜竴涓煈嶏紝璋㈣阿馃槉锛佹湁浠€涔堥棶棰樻杩庡湪璇勮鍖烘寚鍑猴紒馃挭
