命令模式和外观模式

命令模式,英文名:Command模式。

直接用例子来说明这个模式:

(function(){
	var carManager = {
		requestInfo : function(model, id){

		},
		buyVehicle: function(model, id){

		}
	};     ......
})()

在上面的代码中,我们定义了一个名为carManager的对象,我们可以通过carManager对象调用它的两个方法。

但是通过命令模式,我们可以这样来调用carManager对象中的方法。

carManager.execute("buyVehicle", "chaojidan", "01");

carManager.execute("requestInfo", "chaojidan", "01");

要实现这种方式的调用,我们需要给carManager添加execute方法,此方法就是把carManager对象中的所有方法进行了抽象处理,变成了调用carManager对象方法的统一接口。

carManager.execute = function(name){
	return carManager[name] && carManager[name].apply(carManager,[].slice.call(arguments,1));
}

这里,我们可以假设传入execute方法中的name为命令名,当调用此方法时,会执行此命令的方法。

外观模式,英文名:Facade。

基本概念:外观模式为更大的代码体提供了一个方便的高层次接口,能够隐藏其底层的真实复杂性。

在jQuery等javascript库中经常可以看到。每当我们使用$.(el).css()等方法时,实际上我们是在使用外观模式。

举个例子:

跨浏览器的事件绑定。

var addEvent = 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;
	}
};

这里的addEvent方法就是一个外观模式,我们只需要调用addEvent来进行事件的绑定,而它内部需要兼容其他浏览器进行的代码处理,我们不用去考虑。

它只暴露了addEvent方法,从而将更复杂的实现隐藏起来。

外观模式经常和模块模式一起实现,外观模式提供一个简单的api接口给开发人员调用,模块模式把具体的比较复杂的实现代码放到自己的内部的方法中。

加油!

时间: 2024-11-14 12:43:10

命令模式和外观模式的相关文章

设计模式(7)--适配式模式与外观模式

转换接口. 引入新原则: " 最少知识"原则   作用为 外观模式 面向对象的适配器:将一个接口转换成另一个接口,以符合客户的期望. 对象适配器  与  类适配器 OO原则:(1)封装变化 (2)多用组合,少用继承 (3)针对接口编程,不针对实现编程 (4)为交互对象之间的松耦合设计而努力 (5)类应该对扩展开放,对修改关闭.(6) 依赖抽象,不要依赖具体类.(7)只和朋友交流. OO模式: 适配器模式-:将一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无

14结构型模式之外观模式

概念  Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种.Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面.这个一致的简单的界面被称作facade. 角色和职责 Fa?ade 为调用方, 定义简单的调用接口. Clients 调用者.通过Facade接口调用提供某功能的内部类群. Packages 功能提供者.指提供功能的类群(模块或子系统) 适用于: 为子系统中统一一套接口,让子系统更加容易使用. 案例 //实现多个子系统的封装 #i

2 结构型模式之 - 外观模式

外观模式的介绍:外观模式在开发运用中的频率非常高,尤其是现阶段各种第三方SDK充斥在我们的周边,而这些SDK很大概率会使用外观模式,通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样就能够降低用户使用的复杂度,也对用户屏蔽了很多实现细节,当然 ,在我们的开发过程中,外观模式也是我们封装API的常用手段,例如网络模块,ImageLoader模块等.可能你已经在开发中运用过无数次外观模式,只是没有理论层面上认识它,本章我们就从理论与实践相结合的方式来理解外观模式 外观模式的定义: 要求一个

24天学会设计模式----门面模式(外观模式)

一.门面模式 1.定义 GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易使用. 2.结构 门面角色:客户端可以调用这个角色的方法.此角色知道子系统的功能和责任.在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去. 子系统角色:可以同时有一个或者多个子系统.每一个子系统都不是一个单独的类,而是一个类的集合.每个子系统都可以被客户端直接调用,或者被门面角色调用. 3.适用性 (1

结构型模式之外观模式

概述 外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道 定义 为子系统中的一组接口提供一个统一的入口.外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 实现 子系统 /// <summary> /// 注册账号类 /// </summary> public class RegistAccount { /// <summary>

结构型模式之 外观模式

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.外观模式又称为门面模式,它是一种对象结构型模式. 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口. 关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序.依赖

JAVA设计模式之门面模式(外观模式)

医院的例子 现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其"分而治之",把一个系统划分为几个较小的子系统.如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号.门诊.划价.化验.收费.取药等.看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情. 首先病人必须先挂号,然后门诊.如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验.化验后再回到门诊室. 上图描述的是病人在医院里的体验,图

门面模式(外观模式)

参考:http://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html /DesignPatterns/src/com/louis/Facade/ModuleA.java /** * Project Name:DesignPatterns * File Name:ModuleA.java * Package Name:com.louis.Facade * Date:2017年11月2日下午4:17:32 * Copyright

外观模式 门面模式 Facade 创建型 设计模式(十三)

外观模式(FACADE) 又称为门面模式 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统基本上都是会往功能更全面的方向发展,那么也就意味着我们的系统将会变得更加复杂. 系统会被划分为多个单独的子系统,每个子系统完成一部分功能,通过分工协作完成全部功能. 一个子系统也可能进一步拆分为更小的几个子系统. 程序中的文件将会越来越多,相互关联也会变得更加复杂 当使用一个功能的时候,作为客户端 你需