外觀模式:定義了一個高層接口,這個接口使得子系統(tǒng)更加容易使用捷雕;另一種說法:提供了一個統(tǒng)一的接口椒丧,用來訪問子系統(tǒng)中的一群接口。外觀定義了一個高層接口救巷,讓子系統(tǒng)更容易使用壶熏。
外觀模式結(jié)構(gòu)圖.png
一、子系統(tǒng)類
package com.zcbl.client.zcblsdk.facademodel;
/**
* Created by serenitynanian on 2018/6/5.
* 子系統(tǒng)
*/
public class SubSystemOne {
public void methodOne(){
System.out.println("子系統(tǒng)方法一");
}
}
/**
* Created by serenitynanian on 2018/6/5.
* 子系統(tǒng)
*/
public class SubSystemTwo {
public void methodTwo(){
System.out.println("子系統(tǒng)方法二");
}
}
/**
* Created by serenitynanian on 2018/6/5.
* 子系統(tǒng)
*/
public class SubSystemThree {
public void methodThree(){
System.out.println("子系統(tǒng)方法三");
}
}
二浦译、外觀類:它需要了解所有子系統(tǒng)的方法或?qū)傩园艏伲M(jìn)行組合,以備外界調(diào)用
/**
* Created by serenitynanian on 2018/6/5.
* 外觀模式
* 外觀類:它需要了解所有子系統(tǒng)的方法或?qū)傩跃眩M(jìn)行組合帽哑,以備外界調(diào)用
*/
public class Facade {
SubSystemOne subSystemOne ;
SubSystemTwo subSystemTwo ;
SubSystemThree subSystemThree ;
public Facade() {
this.subSystemOne = new SubSystemOne();
this.subSystemTwo = new SubSystemTwo();
this.subSystemThree = new SubSystemThree();
}
public void methodOne(){
System.out.println("--------執(zhí)行方法組One------");
subSystemOne.methodOne();
subSystemTwo.methodTwo();
}
public void methodTwo(){
System.out.println("--------執(zhí)行方法組Two------");
subSystemOne.methodOne();
subSystemThree.methodThree();
}
public void methodThree(){
System.out.println("--------執(zhí)行方法組Three------");
subSystemTwo.methodTwo();
subSystemThree.methodThree();
}
}
三、客戶端調(diào)用
/**
* Created by serenitynanian on 2018/6/5.
* 由于Facade的作用叹俏,客戶端可以根本不知道三個子系統(tǒng)類的存在的妻枕;
*
* 備注:外觀模式完美的體現(xiàn)了依賴倒轉(zhuǎn)原則(面向接口編程)和迪米特法則(最少知識原則)的思想
*/
public class Test {
public static void main(String[] args) {
Facade facade = new Facade();
facade.methodOne();
facade.methodTwo();
facade.methodThree();
}
}
四、總結(jié)
- 1.在設(shè)計初期階段,應(yīng)該有意識的將不同層進(jìn)行分離:數(shù)據(jù)訪問層與業(yè)務(wù)邏輯層佳头,業(yè)務(wù)邏輯層與View層的層與層之間建立外觀Facade鹰贵,這樣可以為復(fù)雜的子系統(tǒng)提供一個簡單的接口,使得耦合降低康嘉;
- 2.在維護(hù)一個遺留的復(fù)雜的系統(tǒng)時碉输,這個系統(tǒng)已經(jīng)難以擴(kuò)展與維護(hù)了,但是它又非常重要亭珍,新的需求必須依賴與它敷钾,此時可以為新系統(tǒng)開發(fā)出一個Facade類,來給遺留的架構(gòu)提供簡單的接口肄梨,讓新系統(tǒng)與Facade對象交互阻荒,F(xiàn)acade與遺留的架構(gòu)進(jìn)行復(fù)雜的交互;
- 3.外觀模式完美的體現(xiàn)了依賴倒轉(zhuǎn)原則(面向接口編程)和迪米特法則(最少知識原則)众羡;