外觀模式:爲子系統的一組接口,提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
在講外觀模式前,我們引入兩個設計模式中的兩個重要原則:依賴倒轉原則和迪米特法則。
依賴倒轉原則:抽象不依賴細節,細節要依賴抽象。簡單講,就是面向接口編程,而不面向實現編程。
迪米特法則:如果兩個類不必彼此直接通信,那麼這兩個類就不應該發生直接的相互作用。如果其中的一個類需要調用另一個類,則由第三方轉發這個調用。
外觀模式完美的體現了依賴倒轉原則和迪米特法則。
我們用經理人購買股票基金來進行說明,普通客戶是不懂得投資股票和基金的,但是我們可以交給經理人,這樣,我們直接面向經理人,不用瞭解細節。
外觀模式結構圖如下:
代碼如下
class Fund1{
public void Method1(){
System.out.println("第一種基金");
}
}
class Fund2{
public void Method2(){
System.out.println("第一種基金");
}
}
class Stock1{
public void Method3(){
System.out.println("第一種股票");
}
}
class Stock2{
public void Method4(){
System.out.println("第二種股票");
}
}
/*
* 外觀類
* 與客戶(端)直接作用
*/
class Manager{
private Fund1 fund1;
private Fund2 fund2;
private Stock1 stock1;
private Stock2 stock2;
public Manager(){
fund1 = new Fund1();
fund2 = new Fund2();
stock1 = new Stock1();
stock2 = new Stock2();
}
public void MethodA(){
stock1.Method3();
stock2.Method4();
}
public void MethodB(){
fund1.Method1();
fund2.Method2();
stock2.Method4();
}
}
public class Client{
public static void main(String[] args) {
// TODO Auto-generated method stub
Manager manager = new Manager();
System.out.println("經理人爲小紅購買的基金和股票:");
manager.MethodA();
System.out.println("經理人爲小強購買的基金和股票:");
manager.MethodB();
}
}
運行結果:經理人爲小紅購買的基金和股票:
第一種股票
第二種股票
經理人爲小強購買的基金和股票:
第一種基金
第一種基金
第二種股票