外觀模式(Facade)為了小小的糾正一下個人的口語,于是有道了一下:[f?'sɑ:d]
對于外觀模式就是為了子系統對外提供的一組接口提供一個統一的界面,似的其他系統對該系統訪問都通過一個同一段的界面來完成。
外觀模式主要由三部分組成,一個中間類,就是Facade類,負責聯系子系統提供對外的接口,一個是多個子系統,一個是客戶端負責通過Facade類對子系統的功能進行操作。
這里通過簡單的工廠生產帽子,被子,筆賣給消費者的過程,并且用Facade類的前后作對比來簡單的理解Facade模式:
Facade模式的原理圖:
對UML部分理解更清楚了一點,發現前面的UML好多不合理的地方,可以學習
[http://blog.csdn.net/zhengzhb/article/details/7187278](http://blog.csdn.net/zhengzhb/article/details/7187278)

普通基礎的設計:
~~~
package com.designpattern.facade;
public class HatFactory {
public static void saleHat() {
System.out.println("sale a hat");
}
}
~~~
~~~
package com.designpattern.facade;
public class CapFactory {
public static void saleCap() {
System.out.println("sale a cap");
}
}
~~~
~~~
package com.designpattern.facade;
public class PenFactory {
public static void salePen() {
System.out.println("sale a pen");
}
}
~~~
~~~
package com.designpattern.facade;
public class Client {
public static void main(String[] args) {
CapFactory.saleCap();
HatFactory.saleHat();
PenFactory.salePen();
}
}
~~~
這樣如果客戶想買各種商品的話就必須直接和廠家聯系,然后買商品,實現起來卻是很是麻煩,但是如果引入了如下的Facade類就簡單多了,具體操作如下:
~~~
package com.designpattern.facade;
public class Facade {
public static void saleHat() {
HatFactory.saleHat();
}
public static void saleCap() {
CapFactory.saleCap();
}
public static void salePen() {
PenFactory.salePen();
}
}
~~~
~~~
package com.designpattern.facade;
public class Client {
public static void main(String[] args) {
Facade.saleCap();
Facade.saleHat();
Facade.salePen();
}
}
~~~
這樣在客戶買商品的時候只要去Facade商店就行了,直接到商店想買什么就買什么,具體商店和廠家怎么聯絡的客戶是不用去理會的,這樣就對于客戶端程序員提供了很大的簡便可行。一些很好的持久層的框架也是用這樣一個設計模式達到一個很好的用戶體驗。
外觀模式通過提供一個統一的對外接口,避免的外部系統和子系統之間的直接聯系從而降低了系統間的依賴和復雜度。
但是限制了外部系統對子系統調用的靈活性,只能按照外觀類中提供的方式對子系統進行調用。
- 前言
- 前言(目錄、源碼、資料)
- (一)簡單工廠模式(SimpleFatory)
- (二)工廠方法模式(FactoryMethod)
- (三)抽象工廠模式(AbstractFactory)
- (四)創建者模式(Builder)
- (五)原型模式(Prototype)
- (六)單例模式(Singleton)
- (七)外觀模式(Facade)
- (八)適配器模式(Adapter)
- (九)代理模式(Proxy)
- (十)裝飾模式(Decorator)
- (十一)橋模式(birdge)
- (十二)組合模式(Composite)
- (十三)享元模式(Flyweight)
- (十四)模板方法模式(Template)
- (十五)觀察者模式(Observer)
- (十六)狀態模式(State)