外觀模式通過(guò)引入一個(gè)外觀角色來(lái)簡(jiǎn)化客戶端與子系統(tǒng)之間的交互,為復(fù)雜的子系統(tǒng)調(diào)用提供一個(gè)統(tǒng)一的入口,使子系統(tǒng)與客戶端的耦合度降低,且客戶端調(diào)用非常方便。
外觀模式的定義:為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一的入口。外觀模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。
外觀模式的結(jié)構(gòu)與實(shí)現(xiàn):
1.Facade(外觀角色):在客戶端可以調(diào)用它的方法,在外觀角色中可以知道相關(guān)的(一個(gè)或多個(gè))子系統(tǒng)的功能和責(zé)任;在正常情況下,它將所有從客戶端發(fā)來(lái)的請(qǐng)求委派到相應(yīng)的子系統(tǒng),傳遞給相應(yīng)的子系統(tǒng)對(duì)象處理。
public class Facade {
private SubSystem subSystem=new SubSystem();
private SubSystemA subSystemA=new SubSystemA();
private SubSystemB subSystemB=new SubSystemB();
public void myTest() {
//調(diào)用子系統(tǒng)方法
subSystem.test();
subSystemA.testA();
subSystemB.testB();
}
}
2.SubSystem(子系統(tǒng)角色):在軟件系統(tǒng)中可以有一個(gè)或者多個(gè)子系統(tǒng)角色,每一個(gè)子系統(tǒng)可以是一個(gè)單獨(dú)類或者一個(gè)類的集合;每一個(gè)子系統(tǒng)都可以被客戶端調(diào)用,或者被外觀角色調(diào)用,它處理由外觀類傳遞來(lái)的請(qǐng)求;子系統(tǒng)并不知道外觀的存在,對(duì)于子系統(tǒng)而言,外觀角色僅僅是另一個(gè)客戶端。
public class SubSystem {
public void test() {
System.out.println("實(shí)現(xiàn)子系統(tǒng)業(yè)務(wù)!");
}
}
public class SubSystemA {
public void testA() {
System.out.println("實(shí)現(xiàn)子系統(tǒng)A業(yè)務(wù)!");
}
}
public class SubSystemB {
public void testB() {
System.out.println("實(shí)現(xiàn)子系統(tǒng)B業(yè)務(wù)!");
}
}
3.Test:
public class Test {
public static void main(String[] args) {
Facade facade=new Facade();
facade.myTest();
}
}
4.運(yùn)行內(nèi)容:
實(shí)現(xiàn)子系統(tǒng)業(yè)務(wù)!
實(shí)現(xiàn)子系統(tǒng)A業(yè)務(wù)!
實(shí)現(xiàn)子系統(tǒng)B業(yè)務(wù)!