設計模式——外觀模式

我的在CSDN上的BLOG:http://blog.csdn.net/feb13/article/details/7905731java

FACADE 外觀模式ide

一、 意圖測試

爲子系統中的一組接口提供一個一致的界面,Façade模式定義了一個高層接口,這一接口使得這一子系統更加容易使用。.net

二、 適用性代理

在遇到如下狀況時使用:指針

  • 當你要爲一個複雜子系統提供一個簡單接口時。
  • 客戶程序與抽象類的實現部分之間存在着很大的依賴性。
  • 當你須要構建一個層次結構的子系統時,使用façade模式定義子系統中每層的入口。

三、 結構code


四、 參與者對象

Façadeblog

           知道哪些子系統類負責子系統對象;接口

           將客戶的請求代理給適當的子系統對象。

 Subsystemclasses

                   實現子系統的功能。

                   處理由Façade對象指派的任務。

                   沒有façade的任何相關信息;即沒有指向façade的指針。

五、 協助

  • 客戶程序經過發送請求給Façade的方式與子系統通信,Façade將這些消息轉發給適當的子系統對象。
  • 使用Façade的客戶程序不須要直接訪問子系統對象。

        

六、 效果

Façade模式有如下有點:

1)  它對客戶屏蔽子系統組件,於是減小了客戶處理的對象的數目並使得子系統使用起來方便。

2)  它實現了子系統與客戶之間的鬆耦合關係,而子系統內部的功能組件每每是緊耦合的。

3)  它並不限制它們使用子系統類,所以能夠在系統易用性和通用性之間加以選擇。

七、 實現

1)  下降客戶—子系統之間的耦合度;用抽象類實現Façade而它的具體子類對應於不一樣的子系統實現,這能夠進一步下降客戶與子系統的耦合度。

2)  公共子系統類與私有子系統類;一個子系統類與一個類的類似之處是,它們都有接口而且它們都封裝了一些東西——類封裝了狀態和操做,而子系統封裝了一些類。

八、 相關示例

Model

package com.examples.pattern.facade;

public interface IModel_A {
	public void testA();
}
package com.examples.pattern.facade;

public class Model_A_impl implements IModel_A {

	@Override
	public void testA() {
		System.out.println("這是模塊A的測試代碼...");
	}

}
package com.examples.pattern.facade;

public interface IModel_B {
	public void testB();
}
package com.examples.pattern.facade;

public class Model_B_impl implements IModel_B {

	@Override
	public void testB() {
		System.out.println("這是模塊B的測試代碼...");
	}

}
package com.examples.pattern.facade;

public interface IModel_C {
	public void testC();
}
package com.examples.pattern.facade;

public class Model_C_impl implements IModel_C {

	@Override
	public void testC() {
		System.out.println("這是模塊C的測試代碼...");
	}

}

Façade

package com.examples.pattern.facade;

public class Facade {

	public void test() {

		IModel_A ma = new Model_A_impl();
		ma.testA();
		IModel_B mb = new Model_B_impl();
		mb.testB();
		IModel_C mc = new Model_C_impl();
		mc.testC();

	}

}

Client

package com.examples.pattern.facade;

public class Client {
	
	public static void main(String[] args) {
		new Facade().test();
	}

}


九、 相關模式

Abstract Factory模式能夠與Façade模式一塊兒使用以提供一個接口,這個接口可用來以一種子系統獨立的方式建立子系統對象。Abstract Factory也能夠代替Façade模式隱藏那些平臺相關的類。

Mediator 模式與Façade模式的類似支出是,它抽象了一些已有的類的功能。然而,Mediator的目的是對同事之間的任意通信進行抽象,一般集中不屬於任何單 個對象的功能。Mediator的同事對象知道中介者並與它通訊,而不是直接與其餘同類對象通訊。相對而言,Façade模式僅對子系統對象的接口進行抽 象,從而使它們更容易使用;它並不定義新功能,子系統也不知道Façade的存在。

相關文章
相關標籤/搜索