激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JAVA教程 - 輕松掌握java責任鏈模式

輕松掌握java責任鏈模式

2020-06-19 11:18斷了聯系 JAVA教程

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

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

特點:1、降低耦合度。它將請求的發送者和接收者解耦。

             2、簡化了對象。使得對象不需要知道鏈的結構。

             3、增強給對象指派職責的靈活性。通過改變鏈內的成員或者調動它們的次序,允許動態地新增或者刪除責任。

             4、增加新的請求處理類很方便。

企業級開發和常用框架中的應用:spring,struts的攔截器,servlet的過濾器

具體實例:

 

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
/**
 *這里以公司請假舉例:
 *1、某人請假(事件)
 *2、項目組長審批:小于三天可以審批,大于三天請示上級
 *3、部門主管審批:小于十天可以審批,大于十天請示上級
 *4、總經理審批 :小于30天可以審批,大于30天不批準
 */
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("王五");
 
 //指定責任鏈模式
 a.setNextLeader(b);
 b.setNextLeader(c);
 
 a.handler(event);
 }
}
 
/**
 * 事件對象,責任鏈中的具體處理事件
 * 該實例中即為請假這件事兒
 */
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;
 }
}
 
/**
 * 抽象責任鏈對象,后面的所有實際責任鏈對象繼承自該對象
 */
abstract class Leader{
 private String name;
 protected Leader nextLeader;//責任鏈中的下一個責任對象,這是讓責任鏈持續下去的基礎
 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);
}
 
/**
 * 請假流程中的第一個對象,組長
 */
class GroupLeader extends Leader{
 
 public GroupLeader(String name) {
 super(name);
 }
 
 protected void handler(Event event) {
 if(event.getDays() < 3){
 System.out.println("--------------------請假條--------------------");
 System.out.print("| 請假人:"+event.getName()+" | ");
 System.out.println("請假天數:"+event.getDays()+"天"+" |");
 System.out.println("| 請假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(組長),通過!");
 System.out.println();
 }else{
 System.out.println(this.getName()+"(主管),沒有權限!");
 this.nextLeader.handler(event);
 }
 }
}
 
/**
 * 請假流程中的第二個對象,部門主管
 */
class Manager extends Leader{
 
 public Manager(String name) {
 super(name);
 }
 
 protected void handler(Event event) {
 if(event.getDays() < 10){
 System.out.println("--------------------請假條--------------------");
 System.out.print("| 請假人:"+event.getName()+" | ");
 System.out.println("請假天數:"+event.getDays()+"天"+" |");
 System.out.println("| 請假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(主管),請假通過!");
 System.out.println();
 }else{
 System.out.println(this.getName()+"(總經理),沒有權限!");
 this.nextLeader.handler(event);
 }
 }
}
 
/**
 * 請假流程中的第三個對象,總經理
 */
class GeneralManager extends Leader{
 
 public GeneralManager(String name) {
 super(name);
 }
 
 protected void handler(Event event) {
 if(event.getDays() < 30){
 System.out.println("--------------------請假條--------------------");
 System.out.print("| 請假人:"+event.getName()+" | ");
 System.out.println("請假天數:"+event.getDays()+"天"+" |");
 System.out.println("| 請假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(總經理)");
 System.out.println();
 }else{
 System.out.println("--------------------請假條--------------------");
 System.out.print("| 請假人:"+event.getName()+" | ");
 System.out.println("請假天數:"+event.getDays()+"天"+" |");
 System.out.println("| 請假原因:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(總經理),請假人不通過!");
 System.out.println();
 }
 }
}

責任鏈模式主要用于流程控制這一類的開發,相比較于單純用if-else模式,在代碼修改和整合上有更高的效率,更利于代碼維護。而且,需要增加責任鏈中的對象時,需要在再實現一個具體的責任鏈類,然后創建責任對象,并維護責任鏈關系就行,不需要更大的開銷,而且在實際設計中,我們很多時候責任鏈的維護都在配置文件中進行,這樣我們將節省更多的開發時間。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一级美国一级 | 欧美成人一区免费视频 | 欧美日韩亚洲精品一区二区三区 | 国产精品99精品 | 国产一级一区二区三区 | 国产精品久久久在线观看 | 快播av在线 | 一级成人欧美一区在线观看 | 国产精品av久久久久久久久久 | 国产成人自拍小视频 | 视频一区 中文字幕 | 天海翼无删减av三级在线观看 | freexxxx性女hd性吃奶 | 亚洲国产高清一区 | 中文在线免费观看 | free性欧美hd另类 | 国产青草视频在线观看 | 黄视频网站免费在线观看 | 免费国产视频在线观看 | 久久久久久久久久性 | 黄色高清视频网站 | 成人一级黄色 | 成人毛片视频在线观看 | 国产一区二区三区影视 | 深夜视频在线 | 亚洲伊人色欲综合网 | 成人一级黄色大片 | 看中国一级毛片 | 色婷婷久久一区二区 | 午夜精品一区二区三区免费 | 精品一区在线视频 | 成人午夜视频免费看 | 99re3| 暴力肉体进入hdxxxx0 | japan护士性xxxⅹhd | 国产午夜精品久久久久久免费视 | 免费黄色小网站 | 国产精品亚洲一区二区三区在线观看 | 91高清完整版在线观看 | 中文字幕综合在线观看 | 免费国产一级淫片 |