**外觀模式是隱藏了系統的複雜性,能夠為子系統中的一組介面提供乙個統一的介面。**客戶在使用系統時不必和子系統打交道了,降低了客戶和子系統間的耦合。
角色組成:
1、門面角色(facade):這是外觀模式的核心。它被客戶角色呼叫,因此它熟悉子系統的功能。它內部根據客戶角色已有的需求預定了幾種功能組合。
2、子系統角色(systema、systemb、systemc):實現了子系統的功能。對子系統角色來說,facade角色與客戶角色一樣,是未知的,它沒有任何facade角色的資訊和鏈結。
3、客戶角色(client):呼叫facade角色來完成要得到的功能。
class
systema
}class
systemb
}class
systemc
}public
class
facade
public
void
use()}
class
client
}
以上場景就是乙個門面模式的例子,客戶端直接使用門面類去使用三個系統,而不是乙個乙個的「new」,不關心具體實現。
優點:
1、對客戶端遮蔽了子系統元件,減少了客戶端處理的物件數量,也減少了客戶端的**量。
2、實現了客戶端和子系統的鬆散耦合,使得子系統個變化不會影響到呼叫它的客戶端,只需要改變外觀類即可。
3、乙個子系統的變化不會影響到另乙個子系統,子系統內部變化也不會影響到外觀物件。
缺點:
1、不能很好地限制客戶端直接使用子系統類,如果對客戶端訪問子系統類做太多的限制則減少了可變性和靈活性。
2、如果設計不當,增加新的子系統可能需要修改外觀類的源**,違背了開閉原則。
適用場景:
設計模式9 外觀模式
將類與類之家的依賴關係放在乙個facade類中,降低了類類之間的耦合度,該模式中沒有涉及到介面 實現類1 public class cpu public void shutdown 實現類2 public class memory public void shutdown 實現類3 public c...
設計模式 外觀模式(9)
一 定義 外觀模式為子系統中的一組介面提供乙個一致的介面,其實就是提供乙個高層介面,方便別人的呼叫。二 框架運用 spring jdbc中的外觀模式 org.springframework.jdbc.support.jdbcutils mybatis中的外觀模式 org.apache.ibatis....
設計模式 9 外觀模式
比如開一台裝置需要按順序給顯示器通電 亮燈 發出聲音。在使用外觀模式前,客戶端直接呼叫通電 亮燈 發出聲音。在這樣的情況下,後續如果流程發生變化,比如不需要發出聲音或聲音需要在亮燈之前,就需要修改客戶端的 如果客戶端多處呼叫,就需要修改多處。public class subsystemone pub...