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

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

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 23種設(shè)計(jì)模式(8) java外觀模式

23種設(shè)計(jì)模式(8) java外觀模式

2021-02-02 11:28阿木俠 Java教程

這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java外觀模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

23種設(shè)計(jì)模式第八篇:java外觀模式

定義:

       為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,F(xiàn)acade模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。

角色:

        1、外觀(Facade)角色 :客戶端可以調(diào)用這個(gè)角色的方法。此角色知曉相關(guān)子系統(tǒng)的功能和責(zé)任。在正常情況下,本角色會(huì)將所有從客戶端發(fā)來(lái)的請(qǐng)求委派到相應(yīng)的子系統(tǒng)去。 

       2、子系統(tǒng)(SubSystem)角色 :可以同時(shí)有一個(gè)或者多個(gè)子系統(tǒng)。每個(gè)子系統(tǒng)都不是一個(gè)單獨(dú)的類,而是一個(gè)類的集合。每個(gè)子系統(tǒng)都可以被客戶端直接調(diào)用,或者被外觀角色調(diào)用。子系統(tǒng)并不知道外觀角色的存在,對(duì)于子系統(tǒng)而言,外觀角色僅僅是另外一個(gè)客戶端而已。

示意圖:


23種設(shè)計(jì)模式(8) java外觀模式

示例:

1、子系統(tǒng)角色,由若干個(gè)類組成

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class SubClass1 {
 public void method1(){
  System.out.println("這是子系統(tǒng)類1中的方法1");
 }
 public void method2(){
  System.out.println("這是子系統(tǒng)類1中的方法2");
 }
}
public class SubClass2 {
 public void method1(){
  System.out.println("這是子系統(tǒng)類2中的方法1");
 }
 public void method2(){
  System.out.println("這是子系統(tǒng)類2中的方法2");
 }
}
public class SubClass3 {
 public void method1(){
  System.out.println("這是子系統(tǒng)類3中的方法1");
 }
 public void method2(){
  System.out.println("這是子系統(tǒng)類3中的方法2");
 }
}

2、外觀角色類

?
1
2
3
4
5
6
7
8
9
10
public class FacadeClass {
 public void FacadeMethod(){
  SubClass1 s1 = new SubClass1();
  s1.method1();
  SubClass2 s2 = new SubClass2();
  s2.method1();
  SubClass3 s3 = new SubClass3();
  s3.method1();
 }
}

3、客戶端測(cè)試方法

?
1
2
3
4
5
6
public class ClientClass {
 public static void main(String[] args) {
  FacadeClass fc = new FacadeClass();
  fc.FacadeMethod();
 }
}

        Facade類其實(shí)相當(dāng)于子系統(tǒng)中SubClass類的外觀界面,有了這個(gè)Facade類,那么客戶端就不需要親自調(diào)用子系統(tǒng)中的那些具體實(shí)現(xiàn)的子類了,也不需要知道系統(tǒng)內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),甚至都不需要知道這些子類的存在,客戶端只需要跟Facade類交互就好了,從而更好地實(shí)現(xiàn)了客戶端和子系統(tǒng)中具體類的解耦,讓客戶端更容易地使用系統(tǒng)。
        同時(shí),這樣定義一個(gè)Facade類可以有效地屏蔽內(nèi)部的細(xì)節(jié),免得客戶端去調(diào)用Module類時(shí),發(fā)現(xiàn)一些不需要它知道的方法。如上代碼,我的所有子類中的方法二都是方法一調(diào)用的方法,是配合方法一的,他們不需要被客戶端調(diào)用,而且具有一定的保密性,這樣使用外觀模式時(shí)就可以不被客戶端知道。

優(yōu)點(diǎn):

        實(shí)現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系。
        客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對(duì)象數(shù)目,并使得子系統(tǒng)使用起來(lái)更加容易。

適用場(chǎng)景:

        設(shè)計(jì)初期階段,應(yīng)該有意識(shí)的將不同層分離,層與層之間建立外觀模式。
        開發(fā)階段,子系統(tǒng)越來(lái)越復(fù)雜,增加外觀模式提供一個(gè)簡(jiǎn)單的調(diào)用接口。
        維護(hù)一個(gè)大型遺留系統(tǒng)的時(shí)候,可能這個(gè)系統(tǒng)已經(jīng)非常難以維護(hù)和擴(kuò)展,但又包含非常重要的功能,為其開發(fā)一個(gè)外觀類,以便新系統(tǒng)與其交互。

外觀模式總結(jié):

1、外觀模式為復(fù)雜子系統(tǒng)提供了一個(gè)簡(jiǎn)單接口,并不為子系統(tǒng)添加新的功能和行為。
2、外觀模式實(shí)現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系。
3、外觀模式?jīng)]有封裝子系統(tǒng)的類,只是提供了簡(jiǎn)單的接口。 如果應(yīng)用需要,它并不限制客戶使用子系統(tǒng)類。因此可以靈活的在系統(tǒng)易用性與通用性之間選擇。
4、外觀模式注重的是簡(jiǎn)化接口,它更多的時(shí)候是從架構(gòu)的層次去看整個(gè)系統(tǒng),而并非單個(gè)類的層次。

轉(zhuǎn)自:java知音

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲色图欧美图片 | 桥本有菜作品在线 | 日本捏胸吃奶视频免费 | 羞羞答答免费人成黄页在线观看国产 | 国产区小视频 | 免费观看日本人成影片 | 免费视频专区一国产盗摄 | 免费精品国产 | 女仆掀起蕾丝裙被打屁股作文 | 亚洲欧洲日产国码 最新 | www免费看| 万域之王动漫在线观看全集免费播放 | 91精品大神国产在线播放 | 欧美精品一区二区三区久久 | 99爱在线精品视频免费观看9 | 美女扒开胸罩露出奶了无遮挡免费 | 青草草视频在线观看 | 国产欧美日韩精品一区二区三区 | 国产精品午夜久久 | 日本中文字幕黑人借宿影片 | 2020年精品国产午夜福利在线 | 精品女同一区二区三区免费站 | 欧美人与禽交片在线播放 | 亚洲 日韩 国产 制服 在线 | 古装全套 毛片 | 毛片视频网站在线观看 | 九九精品99久久久香蕉 | 欧美国产日本高清不卡 | 亚洲女人国产香蕉久久精品 | 精品久久久久国产免费 | 亚洲另类老妇videos | 国产欧美二区三区 | 久久精品国产在热亚洲 | 久草热8精品视频在线观看 久草草在线视视频 | 91短视频版高清在线观看免费 | 亚洲午夜久久久久影院 | 被黑人日 | 日不卡 | 美女扒开奶罩让男人吃奶 | 四虎永久免费地址ww417 | 女人c交zzzooo在线观看 |