设计模式(八):外观模式

这个模式是我觉得最好懂的模式。

外观(Facade)模式

定义:

外观模式是一种结构型模式。它为更大的代码体提供了一个方便的高层次接口,能够隐藏其底层的真实复杂性。简单说就是——小接口有大智慧。

例子:

使用jQuery的$(el).css()或$(el).animate()方法时,实际上我们是在使用Facade:一种更简单的公有接口,使我们不必手动在jQuery核心调用很多内部方法以便实现某些行为。

优点:

1. 易于使用。

2. 实现该模式时占用空间小。

3. 调用者与底层代码解耦。

缺点:

1. 可能存在隐性成本,性能下降。

使用场景:

1. 为一个复杂子系统提供一个简单接口。

2. 提高子系统的独立性。

示例:

使用Facade来简化用于监听跨浏览器事件的接口。

var addMyEvent = function( el,ev,fn ){
  if( el.addEventListener ){
            el.addEventListener( ev,fn, false );
      }else if(el.attachEvent){
            el.attachEvent( "on" + ev, fn );
      } else{
          el["on" + ev] = fn;
    }
};

结论:

当使用Facade模式时,要了解涉及的任何性能成本,并确认是否值得抽象。

中介者模式与外观模式区别

中介者模式在它被模块显式引用的地方汇集这些模块之间的通信。从某种意义上说,这是多方向的。

外观模式仅是为模块或系统定义了一个较简单的接口,而没有添加任何额外的功能。系统中的其他模块不会直接关联外观,所以可以被视为单向的。

 

参考文献

1. 《Learning JavaScript Design Patterns》 by Addy Osmani

https://addyosmani.com/resources/essentialjsdesignpatterns/book/

2. 《JavaScript设计模式》by 徐涛【译】

 

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址 :http://www.cnblogs.com/lovesong/p/5612488.html

posted @ 2016-06-23 22:47  海角在眼前  阅读(702)  评论(0编辑  收藏  举报