概观: 在本文中,我们将讨论在JavaScript中使用的不同的设计模式. 大多数开发商想找出确切的或理想的设计模式,在他们的程序中使用. 老实说, 有没有具体回答这个问题,或有没有这会找出正确的设计模式的公式在特定情况下被使用. 所以在这样的情况, 我们应该有设计模式的坚定喘息和具体问题,他们处理, 我们应该在一个更好的局面采取哪些设计模式,其中状态下使用的决定.
介绍:
设计模式是可以在软件设计和开发适用于常见的重新发生的问题,可重用解决方案. 由于使用的模板来解决共同问题的设计模式也被称为. 设计模式有三大好处:
- 他们是成熟的解决方案: 设计模式提供软件的发展提供了坚实的方式,并使用成熟的技术,.
- 可以很容易地重用: 设计模式的概念,并提供了一个适合我们的需求的一揽子解决方案. 这一特点使设计模式更强大和在类似条件下,它们可以被重新用于.
- 模式是表现: 每一个设计图案呈现其可以被用来提供更大问题的解一组预定义结构和词汇.
设计模式从来没有提供对一个问题的精确解. 要注意,模式的作用是提供一个解决方案是非常重要的.
设计模式的类型
设计模式可分为以下三个子类别:
- 造物设计模式 : 在这一类下面设计模式落 :
- 独生子
- 生成器
- 厂
- 抽象
- 原型
- 生成器
- 结构设计模式 : 在这一类下面设计模式落 :
- 装饰
- 正面
- 次最轻量级职业拳击手
- 适配器
- 代理
- 行为设计模式 : 在这一类的以下设计图案秋天 :
- 迭代器
- 游客
- 中间人
- 观察
在JavaScript中模式:
下面的模式在JavaScript中常用的:
- 构造模式
- 模块模式
- Singleton模式
- 观察者模式
- 调解模式
- 原型模式
- 命令模式
- 门面模式
- 工厂模式
- 装饰图案
- 享元模式
构造器模式:
按照经典的面向对象的编程概念, 构造是用于在所述存储器中创建一个对象的一个实例方法的一种特殊类型的. 在JavaScript对象的创建是通过使用以下三种办法:
Listing 1: 在JavaScript中用于创建对象的三种方法
[Code]
// 途径 1
是NEWOBJECT = {};
//途径 2
VAR NEWOBJECT =的Object.create(零);
//途径 3
VAR NEWOBJECT =新对象();
[/Code]
在第三种方法中, 目的是使用在没有值传递或设置对象的构造函数创建. 有多种方法可以值设置一个新创建的对象. These are:
Listing 2: 途径值设置构造
[Code]
//途径 1
newObject.someKey =“Hello World”的
//途径 2
NEWOBJECT[someKey] =“Hello World”的
//途径 3
Object.defineProperty( NEWOBJECT, “someKey”, {
值 : “你好,世界” 可写的 : 真 枚举 : 真 配置 : 真 ); [/Code] |
Singleton模式:
我们都知道,单件模式限制了单一实例的创建一个对象. Singleton模式通过与它创建仅当没有其它实例中存在的对象的新实例的方法创建类实现. 在JavaScript单身作为从全局命名空间隔离的实现共享资源的命名空间. 在JavaScript, 单以下列方式实施:
Listing 3: 在JavaScript中执行辛格尔顿
[Code]
是mySingleton = (功能 () {
// 实例存储对辛格尔顿参考
例如VAR;
初始化函数() {
// 独生子
// 私有方法和变量
功能privateMethod(){
的console.log( “我私人” );
}
是私有变量= “林还私”;
VAR privateRandomNumber =的Math.random();
return {
// 公共方法和变量
publicMethod: 功能 () {
的console.log( “市民可以看到我!” );
},
公共财产: “我也公开”,
getRandomNumber的: 功能() {
返回privateRandomNumber;
}
};
};
return {
// 如果存在获取Singleton实例
// 或创建一个,如果它不
的getInstance: 功能 () {
如果 ( !例 ) {
实例初始化=();
}
例如返回;
}
};
})();
是myBadSingleton = (功能 () {
// 实例存储对辛格尔顿参考
例如VAR;
初始化函数() {
// 独生子
VAR privateRandomNumber =的Math.random();
return {
getRandomNumber的: 功能() {
返回privateRandomNumber;
}
};
};
return {
// 总是创建一个新的Singleton实例
的getInstance: 功能 () {
实例初始化=();
例如返回;
}
};
})();
// Usage:
是single1 = mySingleton.getInstance();
是single2 = mySingleton.getInstance();
的console.log( singleA.getRandomNumber() === singleB.getRandomNumber() ); // 真
VAR badSingle1 = myBadSingleton.getInstance();
VAR badSingle2 = myBadSingleton.getInstance();
的console.log( badSingleA.getRandomNumber() !== badSingleB.getRandomNumber() ); // 真
[/Code]
按照GoF的, 单是适用于以下几种情况:
- 应该正好存在于对象实例.
- 唯一的实例应该由子类是可扩展.
观察者模式:
在观察者模式, 物体 (也被称为主题) 维持依赖于它的对象列表简称为观察员. 该主题自动通知给观察者所发生的任何变化, 使用广播机构. Observer模式的实现如下所示.
Listing 4: 依赖观察员名单的对象可以有
[Code]
功能ObserverList(){ this.observerList = [];} ObserverList.prototype.Add = function( OBJ ){ return this.observerList.push( OBJ );}; ObserverList.prototype.Empty = function(){ this.observerList = [];}; ObserverList.prototype.Count = function(){ return this.observerList.length;}; ObserverList.prototype.Get = function( index ){ 如果( index > -1 && index < this.observerList.length ){ return this.observerList[ index ]; }}; ObserverList.prototype.Insert = function( OBJ, index ){ var pointer = -1; 如果( 指数=== 0 ){ this.observerList.unshift( OBJ ); pointer = index; }否则,如果( 指数=== this.observerList.length ){ this.observerList.push( OBJ ); pointer = index; } return pointer;}; ObserverList.prototype.IndexOf = function( OBJ, 的startIndex ){ var i = startIndex, 指针= -1; 而( 我 < this.observerList.length ){ 如果( this.observerList[我] === OBJ ){ pointer = i; } 我 ; } return pointer;}; ObserverList.prototype.RemoveAt = function( index ){ 如果( 指数=== 0 ){ this.observerList.shift(); }否则,如果( 指数=== this.observerList.length -1 ){ this.observerList.pop(); }}; // Extend an object with an extensionfunction extend( extension, OBJ ){ 为 ( 在扩展VAR关键 ){ OBJ[键] =扩展[键]; }}
[/Code]
Listing 5: 主题
[Code]
主题功能(){ this.observers = new ObserverList();} Subject.prototype.AddObserver = function( 观察者 ){ this.observers.Add( 观察者 );}; Subject.prototype.RemoveObserver = function( 观察者 ){ this.observers.RemoveAt( this.observers.IndexOf( 观察者, 0 ) );}; Subject.prototype.Notify = function( 背景 ){ var observerCount = this.observers.Count(); 为(var i=0; 我 < observerCount; 我 ){ this.observers.Get(我).更新( 背景 ); }};
[/Code]
在上面的例子, 使用观察者组件, 我们现在定义:
- 一种把新观察到的复选框的页面按钮
- 控制复选框,将作为一个主题, 通知他们应检查其他复选框
- 被添加了一个新的复选框容器
的HTML代码作为下
Listing 5: HTML代码
[Code]
<按钮的ID =”addNewObserver”>添加新的观察员复选框</钮><输入ID =”mainCheckbox” 类型=”复选框”/><DIV ID =”observersContainer”></DIV>
[/Code]
Summary: 因此,在这篇文章中我已经讨论了关于JavaScript的设计模式细节. 设计模式适用于所有类型的像面向对象语言的Java语言,也是脚本语言如JavaScript. 但也有分歧,我们在上面的例子中看到它. 因此得出结论的讨论,我们可以说,设计模式是用来提供解决经常出现的问题. 并请记住,设计模式
- 已被证明的解决方案
- 可以很容易地使用
- 以表现
希望你理解的概念,它会帮助你实现它在自己的项目. 快乐的阅读.
在JS更有趣的文章 — 您必须阅读