日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java设计模式face_24种设计模式--门面模式【Facede Pattern】

發(fā)布時間:2024/10/8 asp.net 93 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java设计模式face_24种设计模式--门面模式【Facede Pattern】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家都寫過紙質(zhì)的信件吧,比如給女朋友寫情書什么的,寫信的過程大家都還記得吧,先寫信的內(nèi)容,然后寫信封,把信放到信封中,封好,投遞到信箱中進(jìn)行郵遞,這個過程還是比較簡單的,雖然簡單,這四個步驟都是要跑的呀,信多了還是麻煩,比如到了情人節(jié),為了大海撈針,給十個女孩子發(fā)情書,都要這樣跑一遍,你不要累死,更別說你要發(fā)個廣告信啥的,一下子發(fā) 1 千萬封郵件,那不就完蛋了?那怎么辦呢?還好,現(xiàn)在郵局開發(fā)了一個新業(yè)務(wù),你只要把信件的必要信息告訴我,我給你發(fā),我來做這四個過程,你就不要管了,只要把信件交給我就成了。

我們的類圖還是從最原始的狀態(tài)開始:

在這種環(huán)境下,最累的是寫信的人,為了發(fā)送一封信出去要有四個步驟,而且這四個步驟還不能顛倒,你不可能沒寫信就把信放到信封吧,寫信的人要知道這四個步驟,而且還要知道這四個步驟的順序,恐怖吧,我們先看看這個過程如何表現(xiàn)出來的:

先看寫信的過程接口,定義了寫信的四個步驟:

1 packagecom.pattern.facade;2

3 /**

4 * 定義一個寫信的過程5 *@author http://www.cnblogs.com/initial-road/

6 *7 */

8 public interfaceLetterProcess {9

10 //首先要寫信的內(nèi)容

11 public voidwriteContext(String context);12

13 //其次寫信封

14 public voidfillEnvelope(String address);15

16 //把信放到信封里

17 public voidletterInotoEnvelope();18

19 //然后郵遞

20 public voidsendLetter();21

22 }23

24 寫信過程的具體實(shí)現(xiàn):25 packagecom.pattern.facade.impl;26

27 importcom.pattern.facade.LetterProcess;28

29 /**

30 * 寫信的具體實(shí)現(xiàn)31 *@author http://www.cnblogs.com/initial-road/

32 *33 */

34 public class LetterProcessImpl implementsLetterProcess{35

36 /**

37 * 在信封上填寫必要的信息38 */

39 @Override40 public voidfillEnvelope(String address) {41 System.out.println("填寫地址人地址及姓名..."+address);42 }43

44 /**

45 * 把信放到信封中,并封好46 */

47 @Override48 public voidletterInotoEnvelope() {49 System.out.println("把信放到信封中...");50 }51

52 /**

53 * 塞到郵箱中,郵遞54 */

55 @Override56 public voidsendLetter() {57 System.out.println("郵遞信件...");58 }59

60 /**

61 * 寫信62 */

63 @Override64 public voidwriteContext(String context) {65 System.out.println("填寫信的內(nèi)容..."+context);66 }67

68 }69

70 然后就有人開始用這個過程寫信了:71 packagecom.pattern.facade;72

73 importcom.pattern.facade.impl.LetterProcessImpl;74

75 /**

76 * 給朋友寫信77 *@author http://www.cnblogs.com/initial-road/

78 *79 */

80 public classClient {81

82 public static voidmain(String[] args) {83

84 //創(chuàng)建一個處理信件的過程

85 LetterProcess letterProcess = newLetterProcessImpl();86

87 //開始寫信

88 letterProcess.writeContext("Hello are you?");89

90 //開始寫信封

91 letterProcess.fillEnvelope("北京市海淀區(qū)中關(guān)村中科院1002號. Jack");92

93 //把信放到信封里,并封裝好

94 letterProcess.letterInotoEnvelope();95

96 //跑到郵局把信塞到郵箱,投遞

97 letterProcess.sendLetter();98

99 }100

101 }

那這個過程與高內(nèi)聚的要求相差甚遠(yuǎn),你想,你要知道這四個步驟,而且還要知道這四個步驟的順序,一旦出錯,信就不可能郵寄出去,那我們?nèi)绾蝸砀倪M(jìn)呢?先看類圖:

這就是門面模式,還是比較簡單的,Sub System 比較復(fù)雜,為了讓調(diào)用者更方便的調(diào)用, 就對 Sub System進(jìn)行了封裝,增加了一個門面,Client 調(diào)用時,直接調(diào)用門面的方法就可以了,不用了解具體的實(shí)現(xiàn)方法以及相關(guān)的業(yè)務(wù)順序,我們來看程序的改變,LetterProcess 接口和實(shí)現(xiàn)類都沒有改變,只是增加了一個ModenPostOffice 類,我們這個 java 程序清單如下:

1 packagecom.pattern.facade;2

3 importcom.pattern.facade.impl.LetterProcessImpl;4

5 /**

6 * 郵局7 *@author http://www.cnblogs.com/initial-road/

8 *9 */

10 public classModenPostOffice {11 private LetterProcess letterProcess = newLetterProcessImpl();12

13 //寫信,封裝,投遞,一體化了

14 public voidsendLetter(String context, String address){15

16 //幫你寫信

17 letterProcess.writeContext(context);18

19 //寫好信封

20 letterProcess.fillEnvelope(address);21

22 //把信放到信封中

23 letterProcess.letterInotoEnvelope();24

25 //郵遞信件

26 letterProcess.sendLetter();27 }28 }

這個類就是說現(xiàn)在有郵局提供了一種新型的服務(wù),客戶只要把信的內(nèi)容以及收信地址給他們,他們就會把信寫好,封好,并發(fā)送出去,這種服務(wù)提出時大受歡迎呀,這簡單呀,客戶減少了很多工作,那我們看看客戶是怎么調(diào)用的,Client.java 的程序清單如下:

1 packagecom.pattern.facade;2

3 importcom.pattern.facade.impl.LetterProcessImpl;4

5 /**

6 * 給朋友寫信7 *@author http://www.cnblogs.com/initial-road/

8 *9 */

10 public classClient {11

12 public static voidmain(String[] args) {13

14 //現(xiàn)代化的郵局,有這項(xiàng)服務(wù),郵局名稱叫Hell Road

15 ModenPostOffice hellRoadPostOffice = newModenPostOffice();16

17 //你只要把信的內(nèi)容和收信人地址給他,他會幫你完成一系列的工作18 //定義一個地址

19 String address = "Happy Road No. 666,God Province,Heaven";20

21 String context = "Hello,It‘s me,do you know who I am? I‘m your old lover.I‘dlike to....";22

23 hellRoadPostOffice.sendLetter(context, address);24

25 }26

27 }

看到?jīng)],客戶簡單了很多,提供這種模式后,系統(tǒng)的擴(kuò)展性也有了很大的提高,突然一個非常時期,寄往其他省的郵件都必須進(jìn)行安全檢查,那我們這個就很好處理了,看類圖:

其他部分在類圖上都不需要改動,那我們來看源碼:

1 packagecom.pattern.facade;2

3 importcom.pattern.facade.impl.LetterProcessImpl;4

5 /**

6 * 郵局7 *@author http://www.cnblogs.com/initial-road/

8 *9 */

10 public classModenPostOffice {11 private LetterProcess letterProcess = newLetterProcessImpl();12 private Police police = newPolice();13

14 //寫信,封裝,投遞,一體化了

15 public voidsendLetter(String context, String address){16

17 //幫你寫信

18 letterProcess.writeContext(context);19

20 //寫好信封

21 letterProcess.fillEnvelope(address);22

23 //警察叔叔檢查信件了

24 police.checkLetter(letterProcess);25

26 //把信放到信封中

27 letterProcess.letterInotoEnvelope();28

29 //郵遞信件

30 letterProcess.sendLetter();31 }32 }

只是增加了一個 letterPolice 變量的聲明以及一個方法的調(diào)用,那這個寫信的過程就變成了這樣:先寫信,然后寫信封,然后警察開始檢查,然后才把信放到信封,然后發(fā)送出去,那這個變更對客戶來說,是透明的,他根本就看不到有人在檢查他的郵件,他也不用了解,反正現(xiàn)代化的郵件都幫他做了,這也是他樂意的地方。

門面模式講解完畢,這是一個很好的封裝方法,一個子系統(tǒng)比較復(fù)雜的實(shí)話,比如算法或者業(yè)務(wù)比較復(fù)雜,就可以封裝出一個或多個門面出來,項(xiàng)目的結(jié)構(gòu)簡單,而且擴(kuò)展性非常好。

還有,在一個較大項(xiàng)目中的時候,為了避免人員帶來的風(fēng)險,也可以使用這個模式,技術(shù)水平比較差的成員,盡量安排獨(dú)立的模塊(Sub System),然后把他寫的程序封裝到一個門面里,盡量讓其他項(xiàng)目成員不用看到這些爛人的代碼,看也看不懂,我也遇到過一個“高人”寫的代碼,private 方法、構(gòu)造函數(shù)、常量基本都不用,你要一個public 方法,好,一個類里就一個 public 方法,所有代碼都在里面,然后你就看吧,一大坨的程序,看著能把人逼瘋,使用門面模式后,對門面進(jìn)行單元測試,約束項(xiàng)目成員的代碼質(zhì)量,對項(xiàng)目整體質(zhì)量的提升也是一個比較好的幫助。

總結(jié)

以上是生活随笔為你收集整理的java设计模式face_24种设计模式--门面模式【Facede Pattern】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。