一、模式簡介
定義:對內(nèi)整合多個(gè)子系統(tǒng),對外提供統(tǒng)一接口。外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)具體的細(xì)節(jié),大大降低了系統(tǒng)的復(fù)雜度和提高樂系統(tǒng)的可維護(hù)性。
場景:對分層結(jié)構(gòu)系統(tǒng)構(gòu)建時(shí),使用外觀模式定義子系統(tǒng)中每層的入口點(diǎn)可以簡化子系統(tǒng)之間的依賴關(guān)系。當(dāng)一個(gè)復(fù)雜系統(tǒng)的子系統(tǒng)很多時(shí),外觀模式可以為系統(tǒng)設(shè)計(jì)一個(gè)簡單的接口供外界訪問。當(dāng)客戶端與多個(gè)子系統(tǒng)之間存在很大的聯(lián)系時(shí),引入外觀模式可將它們分離,從而提高子系統(tǒng)的獨(dú)立性和可移植性。
- 角色結(jié)構(gòu):
- 外觀(Facade)角色:為多個(gè)子系統(tǒng)對外提供一個(gè)共同的接口。
- 子系統(tǒng)(Sub System)角色:實(shí)現(xiàn)系統(tǒng)的部分功能,客戶可以通過外觀角色訪問它。
- 客戶(Client)角色:通過一個(gè)外觀角色訪問各個(gè)子系統(tǒng)的功能。
二、模式實(shí)現(xiàn)
public interface Shape { -> 抽象子系統(tǒng)
String shape();
}
public class Triangle implements Shape { -> 具體子系統(tǒng)
@Override
public String shape() {
return "三角形";
}
}
public class Rectangle implements Shape { -> 具體子系統(tǒng)
@Override
public String shape() {
return "長方形";
}
}
public class Facade { -> 外觀類
private Shape triangle = new Triangle();
private Shape rectangle = new Rectangle();
public void triangle(){
System.out.println(this.triangle.shape());
}
public void rectangle(){
System.out.println(this.rectangle.shape());
}
}
Facade facade = new Facade();
facade.triangle();
facade.rectangle();