您的位置:首页 > 其它

[设计模式-结构型]外观模式(Facade)

2014-04-25 18:15 716 查看

概括

名称

Facade
结构


动机

为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
适用性

当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。F a c a d e 可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过f a c a d e 层。

客户程序与抽象类的实现部分之间存在着很大的依赖性。引入f a c a d e 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

当你需要构建一个层次结构的子系统时,使用f a c a d e 模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过f a c a d e 进行通讯,从而简化了它们之间的依赖关系。

解析

形象比喻:

我有一个专业的Nikon 相机, 我就喜欢自己手动调光圈、快门, 这样照出来的照片才专业, 但MM不懂这些, 教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就可以了,一切有相机自动调整,这样MM也可以用这个相机给我拍张照片了。

一言以蔽之,就是提供一个简单的高层调用接口。

实例

对于一件电子产品来说, 有软件的生产,硬件的生产 和软硬件结合等部分。

现在我需要调用一个方法,直接生产产品。

这里有三个文件:

Product.java -- 产品的类,

ProductFacadeImpl.java -- 产品的门面类

TestMain.java -- 测试类

/**
* @author oscar999
* @date 2013-7-29
* @version V1.0
*/
package designptn.facade;

public class Product {
public void product_soft() {
System.out.println("Product Software");
}
public void product_hard() {
System.out.println("Product Hardware");
}
public void integrate() {
System.out.println("Integrate Software and Hardware");
}
}


/**
* @author oscar999
* @date 2013-7-29
* @version V1.0
*/
package designptn.facade;

public class ProductFacadeImpl {
public void product(Product product) {
product.product_soft();
product.product_hard();
product.integrate();
}
}

/**
* @author oscar999
* @date 2013-7-29
* @version V1.0
*/
package designptn.facade;

public class TestMain {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ProductFacadeImpl productFacade = new ProductFacadeImpl();
productFacade.product(new Product());
}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: