File tree Expand file tree Collapse file tree 5 files changed +38
-7
lines changed
JavaScript-Design-Patterns Expand file tree Collapse file tree 5 files changed +38
-7
lines changed Original file line number Diff line number Diff line change
1
+ //javascript 实现计算器
2
+ var Calculator = {
3
+ add :function ( x , y ) {
4
+ return x + y ;
5
+ } ,
6
+ substract :function ( x , y ) {
7
+ return x - y ;
8
+ } ,
9
+ multiply :function ( x , y ) {
10
+ return x * y ;
11
+ } ,
12
+ divide :function ( x , y ) {
13
+ return x / y ;
14
+ }
15
+ }
16
+ Calculator . calc = function ( command ) {
17
+ return Calculator [ command . type ] ( command . op1 , command . opd2 )
18
+ } ;
19
+ Calculator . calc ( { type :'add' , op1 :1 , op2 :1 } ) ;
20
+ Calculator . calc ( { type :'substract' , op1 :5 , op2 :2 } ) ;
21
+ Calculator . calc ( { type :'multiply' , op1 :5 , op2 :2 } ) ;
22
+ Calculator . calc ( { type :'divide' , op1 :8 , op2 :4 } ) ;
Original file line number Diff line number Diff line change 1
1
<h3 >命令模式</h3 >
2
- 命令模式是一种用来封装单个操作(discrete action)的结构型模式。其封装的操作可能是单个方法调用这么简单,也可能是整个子程序那么复杂。经封装的操作可以作为一等的对象进行传送。命令对象主要用于消除调用者与接受者之间的耦合,这有助于创建高度模块化的调用者,它们对所调用的操作不需要任何了解。<br />
3
- <h3 >1、命令的结构</h3<br />
2
+ 在软件系统中,** “行为请求者”** 与** “行为实现者”** 通常呈现一种** “紧耦合”** 。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“** 行为请求者** ”与** “行为实现者** ”解耦?将** 一组行为抽象为对象,实现二者之间的松耦合** 。这就是命令模式(Command Pattern)<br />
3
+ > [ 计算器Demo] ( https://github.com/wchaowu/javascript-code/blob/master/JavaScript-Design-Patterns/The-Command-Pattern/Calculator.js"计算器Demo" )
4
+ >
5
+ ###1 、命令的结构###
4
6
下面展示一个典型的命令类StartAd和StopAd,它们的构造函数由另一个对象adObject作为参数,而它们实现的execute()方法则要调用该对象的某个方法。现在有了两个可用在用户界面中的类,它们具有相同的接口,你不需要也不关心adObject方法的具体实现,只需要知道它实现了start()和stop()方法就可以了。借助命令模式,可以实现用户界面对象与广告对象的隔离。<br />
5
7
<a href =" https://github.com/wchaowu/javascript-code/blob/master/JavaScript-Design-Patterns/The-Command-Pattern/1%20-%20StopAd%20and%20StartAd%20classes.js " >
6
8
example
7
- <a >
8
- <br />
9
- <h4 >1.1、用闭包创建命令对象</h4 ><br />
9
+ <a >
10
+ ####1 .1、用闭包创建命令对象
10
11
这种方法不需要创建一个具有execute方法的对象,而是把想要执行的方法包装在闭包中。这样做省却了作用域和this关键字的绑定这方面的烦恼。<br />
11
12
<a href =" https://github.com/wchaowu/javascript-code/blob/master/JavaScript-Design-Patterns/The-Command-Pattern/2%20-%20Commands%20using%20closures.js " >
12
13
example
Original file line number Diff line number Diff line change 1
1
<h3 >装饰者模式</h3 >
2
- <br />
2
+ > 这个模式就是为对象增加功能(或方法)。
3
+
4
+ 动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类方式更为灵活。
3
5
实例:创建自行车的装饰者<br />
4
6
1、接口在装饰者模式中的角色:<br />
5
7
装饰者模式颇多得益于接口的使用。装饰者最重要的特点之一<br />
Original file line number Diff line number Diff line change 1
1
###外观模式
2
+ ** 门面模式是几乎所有JavaScript库的核心原则**
3
+
4
+ 子系统中的一组接口提供一个一致的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,简单的说这是一种组织性的模式,它可以用来修改类和对象的接口,使其更便于使用。
5
+ 门面模式的两个作用:
6
+ > 1.简化类的接口;
7
+ > 2.消除类与使用它的客户代码之间的耦合。
8
+
2
9
外观模式并不是适配器模式,适配器模式是一种包装器,用来对接口进行适配以便在不兼容系统中使用它。而创建外观元素则是图个方便。它并不用于达到需要特定接口的客户系统打交道这个目的,而是用于提供一个简化的接口。<br />
3
10
<br />
4
11
<a href =" https://github.com/wchaowu/javascript-code/blob/master/JavaScript-Design-Patterns/The-Facade-Pattern/2%20-%20Facades%20as%20convenience%20methods.js " >
Original file line number Diff line number Diff line change 1
1
<h3 >代理模式</h3 >
2
- <br />
3
2
代理是一个对象,可以用来控制对另一个对象的访问。与另外那个对象实现了同样的接口,并且会把任何方法调用传递给那个对象。另外那个对象成为本体。代理可以代替其本体本实例化,并使其可被远程访问。它还可以把本体的实例化推迟到真正需要的时候。<br />
4
3
1、代理的结构:<br />
5
4
代理最基本的形式是对访问进行控制。代理对象和另一个对象实现的是同样的接口。实际上工作的还是本体,它才是负责执行所分派的任务的那个对象或类。代理对象并不会想装饰者模式那样在另一个对象的基础上添加或修改方法,也不会像外观模式那样简化那个对象的接口。它实现的接口与本体完全相同,所有对它进行的方法调用都会被传递给本体。<br />
You can’t perform that action at this time.
0 commit comments