一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 輕松掌握java責(zé)任鏈模式

輕松掌握java責(zé)任鏈模式

2020-06-19 11:18斷了聯(lián)系 JAVA教程

這篇文章主要幫助大家輕松掌握java責(zé)任鏈模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

定義:責(zé)任鏈模式(Chain of Responsibility Pattern)為請(qǐng)求創(chuàng)建了一個(gè)接收者對(duì)象的鏈。這種模式給予請(qǐng)求的類型,對(duì)請(qǐng)求的發(fā)送者和接收者進(jìn)行解耦。這種類型的設(shè)計(jì)模式屬于行為型模式。在這種模式中,通常每個(gè)接收者都包含對(duì)另一個(gè)接收者的引用。如果一個(gè)對(duì)象不能處理該請(qǐng)求,那么它會(huì)把相同的請(qǐng)求傳給下一個(gè)接收者,依此類推。

特點(diǎn):1、降低耦合度。它將請(qǐng)求的發(fā)送者和接收者解耦。

             2、簡(jiǎn)化了對(duì)象。使得對(duì)象不需要知道鏈的結(jié)構(gòu)。

             3、增強(qiáng)給對(duì)象指派職責(zé)的靈活性。通過(guò)改變鏈內(nèi)的成員或者調(diào)動(dòng)它們的次序,允許動(dòng)態(tài)地新增或者刪除責(zé)任。

             4、增加新的請(qǐng)求處理類很方便。

企業(yè)級(jí)開(kāi)發(fā)和常用框架中的應(yīng)用:spring,struts的攔截器,servlet的過(guò)濾器

具體實(shí)例:

 

java" id="highlighter_51199">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/**
 *這里以公司請(qǐng)假舉例:
 *1、某人請(qǐng)假(事件)
 *2、項(xiàng)目組長(zhǎng)審批:小于三天可以審批,大于三天請(qǐng)示上級(jí)
 *3、部門主管審批:小于十天可以審批,大于十天請(qǐng)示上級(jí)
 *4、總經(jīng)理審批 :小于30天可以審批,大于30天不批準(zhǔn)
 */
public class Demo {
 
 public static void main(String[] args) {
 Event event = new Event("程序員", 32, "回老家探親");
 Leader a = new GroupLeader("張三");
 Leader b = new Manager("李四");
 Leader c = new GeneralManager("王五");
 
 //指定責(zé)任鏈模式
 a.setNextLeader(b);
 b.setNextLeader(c);
 
 a.handler(event);
 }
}
 
/**
 * 事件對(duì)象,責(zé)任鏈中的具體處理事件
 * 該實(shí)例中即為請(qǐng)假這件事兒
 */
class Event{
 private String name;
 private int days;
 private String reason;
 public Event(String name, int days, String reason) {
 super();
 this.name = name;
 this.days = days;
 this.reason = reason;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public int getDays() {
 return days;
 }
 public void setDays(int days) {
 this.days = days;
 }
 public String getReason() {
 return reason;
 }
 public void setReason(String reason) {
 this.reason = reason;
 }
}
 
/**
 * 抽象責(zé)任鏈對(duì)象,后面的所有實(shí)際責(zé)任鏈對(duì)象繼承自該對(duì)象
 */
abstract class Leader{
 private String name;
 protected Leader nextLeader;//責(zé)任鏈中的下一個(gè)責(zé)任對(duì)象,這是讓責(zé)任鏈持續(xù)下去的基礎(chǔ)
 public Leader(String name) {
 super();
 this.name = name;
 }
 public void setNextLeader(Leader nextLeader) {
 this.nextLeader = nextLeader;
 }
 
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 protected abstract void handler(Event event);
}
 
/**
 * 請(qǐng)假流程中的第一個(gè)對(duì)象,組長(zhǎng)
 */
class GroupLeader extends Leader{
 
 public GroupLeader(String name) {
 super(name);
 }
 
 protected void handler(Event event) {
 if(event.getDays() < 3){
 System.out.println("--------------------請(qǐng)假條--------------------");
 System.out.print("| 請(qǐng)假人:"+event.getName()+" | ");
 System.out.println("請(qǐng)假天數(shù):"+event.getDays()+"天"+" |");
 System.out.println("| 請(qǐng)假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(組長(zhǎng)),通過(guò)!");
 System.out.println();
 }else{
 System.out.println(this.getName()+"(主管),沒(méi)有權(quán)限!");
 this.nextLeader.handler(event);
 }
 }
}
 
/**
 * 請(qǐng)假流程中的第二個(gè)對(duì)象,部門主管
 */
class Manager extends Leader{
 
 public Manager(String name) {
 super(name);
 }
 
 protected void handler(Event event) {
 if(event.getDays() < 10){
 System.out.println("--------------------請(qǐng)假條--------------------");
 System.out.print("| 請(qǐng)假人:"+event.getName()+" | ");
 System.out.println("請(qǐng)假天數(shù):"+event.getDays()+"天"+" |");
 System.out.println("| 請(qǐng)假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(主管),請(qǐng)假通過(guò)!");
 System.out.println();
 }else{
 System.out.println(this.getName()+"(總經(jīng)理),沒(méi)有權(quán)限!");
 this.nextLeader.handler(event);
 }
 }
}
 
/**
 * 請(qǐng)假流程中的第三個(gè)對(duì)象,總經(jīng)理
 */
class GeneralManager extends Leader{
 
 public GeneralManager(String name) {
 super(name);
 }
 
 protected void handler(Event event) {
 if(event.getDays() < 30){
 System.out.println("--------------------請(qǐng)假條--------------------");
 System.out.print("| 請(qǐng)假人:"+event.getName()+" | ");
 System.out.println("請(qǐng)假天數(shù):"+event.getDays()+"天"+" |");
 System.out.println("| 請(qǐng)假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(總經(jīng)理)");
 System.out.println();
 }else{
 System.out.println("--------------------請(qǐng)假條--------------------");
 System.out.print("| 請(qǐng)假人:"+event.getName()+" | ");
 System.out.println("請(qǐng)假天數(shù):"+event.getDays()+"天"+" |");
 System.out.println("| 請(qǐng)假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(總經(jīng)理),請(qǐng)假人不通過(guò)!");
 System.out.println();
 }
 }
}

責(zé)任鏈模式主要用于流程控制這一類的開(kāi)發(fā),相比較于單純用if-else模式,在代碼修改和整合上有更高的效率,更利于代碼維護(hù)。而且,需要增加責(zé)任鏈中的對(duì)象時(shí),需要在再實(shí)現(xiàn)一個(gè)具體的責(zé)任鏈類,然后創(chuàng)建責(zé)任對(duì)象,并維護(hù)責(zé)任鏈關(guān)系就行,不需要更大的開(kāi)銷,而且在實(shí)際設(shè)計(jì)中,我們很多時(shí)候責(zé)任鏈的維護(hù)都在配置文件中進(jìn)行,這樣我們將節(jié)省更多的開(kāi)發(fā)時(shí)間。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 香蕉精品视频 | 成人国产一区 | 美女无内裤下部黄 | 欧美色图日韩 | 青青国产精品 | 三级无删减高清在线影院 | 亚洲精品视频久久 | xxoosex久久久久久 | 色姑娘导航 | 四虎tv| 五月天精品在线 | 国产3344视频在线观看免费 | 99欧美视频 | 欧美一级艳片视频免费观看 | 国产二区精品视频 | 乌克兰成人性色生活片 | 女主被当众调教虐np | 国产成人+亚洲欧洲 | 欧美性受xxxx88喷潮 | chinese男gay| 国产偷啪| 免费观看国产精品 | 高清视频免费 | 呜嗯啊野战h呻吟男男双性 污小说在线阅读 | h在线动漫| 视频在线观看一区二区 | 国产精品不卡 | 日韩免费毛片视频杨思敏 | 草莓污污 | 蜜桃麻豆| 色综合久久久 | 国产精品视频人人做人人爱 | 四虎永久在线精品波多野结衣 | 欧美成人乱弄视频 | 99r在线观看 | 国产精品久久现线拍久青草 | 日韩理论片在线看免费观看 | 精品久久久久中文字幕日本 | 91嫩草私人成人亚洲影院 | 亚洲国产成人久久综合区 | 亚洲国产精品福利片在线观看 |