因此,哈布罗夫斯克公民已经在OTUS的这个星期四开始了
“ Fullstack JavaScript Developer”课程。 今天,我们将与您分享另一位作者的出版物,以期课程开始。
文章作者: Pavel Yakupov
在本文中,我们将讨论Java语言中最简单,最常见的设计模式-并尝试解释何时应用哪种模式。
一般而言, 设计模式是什么? 设计模式是一个术语,用于表示创建程序时常见问题的常用解决方案。
简而言之,设计模式是经常使用的成功解决方案。 设计模式作为一个概念是在没有提到JavaScript编程语言的时候形成的,在软件工程领域,1994年由四大巨头详细描述了设计模式。 但是,在我们的文章中,我们将转向使用JavaScript编程语言实现一些简单的模式。
让我们快速浏览一下设计模式的主要类型:
创作设计模式
顾名思义,这些模式主要用于创建新对象。 这些包括诸如构造器,工厂,原型和单例的模式。
结构设计模式
这些模式与对象的类和组成相关。 它们有助于构造或重组对象或其零件,而不会影响整个系统的运行。
行为设计模式
这种类型的设计模式旨在改善不同对象之间的通信。 行为设计模式包括Commander,Iterator,Mediator,Observer,状态模式,策略和模板。
在本文中,我们仅分析与创建对象相关的设计模式-因为它们更简单并且更适合初学者开始创建待办事项应用程序,控制台中的文本RPG,Canvas上的简单游戏等。
模式“模块”
这种设计模式以JavaScript语言出现,可以说是不由自主的。 最初,该语言并未考虑消除诸如污染全球范围之类的现象(并且在其他语言中,例如C#或C ++,存在可以解决此问题的命名空间)。 另外,模块对于代码重用来说是部分必需的,因为在首次创建和使用模块之后,可以更有效地将它们连接到其他团队的项目。
模块模块在其存在的整个过程中(已在ES5中被广泛使用)使用了IIFE(即功能表达式)。
这是“模块”模式的一个简单示例:
const first_Module = (function() { let Surname = "Ivanov"; let Nickname = "isakura313"; function declare_Surname() { console.log(Surname); } return { declare_Nickname: function() { alert(Nickname); } } })(); first_Module.declare_Nickname(); console.log(Surname);
“模块”模式完全封装了其中包含的数据。 我们只能使用公共方法来访问它们,直到必须以这种方式实现“现成的”公共和私有方法的JavaScript实现。
构造器模式
这是设计用于创建对象的设计模式。 构造函数是一个创建新对象的函数。 但是,在JavaScript中,即使没有构造函数或类定义,也可以即时创建对象。
构造函数是最常用的设计模式之一。 它用于创建某种类型的对象。
工厂模式
Factory模式是另一种专注于从类创建对象的模式。 在其中,我们提供了委托子类对象创建的公共接口。
这种设计模式最常用于操纵具有不同和相同特征的对象的集合。
在下面的示例中,我们将为文本搜索创建一个敌人类(EnemyFactory)。 是的,示例非常简单,但这是设计模式的问题:“大型”应用程序需要它们。 如果单击该页面仅能弹出三张图片,则没有任何设计模式对您特别有用。
好的,只需在控制台中显示文本RPG的一段代码即可:
class EnemyFactory{ constructor() { this.createEnemy = function(type) { let enemy; if (type === 'goblin' || type === 'ork') enemy = new Infantry(); else if (type === 'elf') enemy = new Archer(); enemy.attack = function() { return `The ${this._type} is attack`; }; return enemy; }; } } class Infantry { constructor() { this._type = 'goblin'; this.scream = function() { return 'AAAAAAAAA! Za ordu!!!'; }; } } class Archer { constructor() { this._type = 'elf'; this.magic_attack = function() { return 'Magic fog around you! You cant see!!'; }; } } const enemy_army = new EnemyFactory(); let newGoblin = enemy_army.createEnemy('goblin'); let newElf = enemy_army.createEnemy('elf'); console.log(newGoblin.attack()); console.log(newElf.attack()); console.log(newGoblin.scream()); console.log(newElf.magic_attack());
原型模式
在这里,我们使用某种类型的真实对象的“骨架”来创建新对象。 原型是使用JavaScript构建OOP的最原始类型。
如果您的应用程序可以某种方式扩展或减少功能,则原型模式很有用。
贷款人模式
或者,众所周知,他是“ Singleton”。 “独来独往”是一种特殊的模式,其中只能存在一个类的实例。 该模式的工作方式如下-如果没有创建或返回单个实例,则对象的初始化将起作用。 如果存在,则将返回触发的对象。
假设我们创建一个主要角色的类,并且我们希望它是1,而不是Jumanji中的4。
class Hero { constructor(name) { if (Hero.exists) { return Hero.instance; } this._name = name; Hero.instance = this; Hero.exists = true; return this; } getName() { return this._name; } setName(name) { this._name = name; } }
因此,感谢大家的关注! 我希望这篇文章将成为JavaScript OOP的一个良好的开端(尽管,老实说,我的同事在Java和JavaScript方面具有多年的经验,但OOP并不是很成熟)。 但是,在新标准中,该语言已得到显着改进,并且我相信这种方法只会更频繁地使用(否则Dart将取代所有方法)。
有用的链接:developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/createLearn.javascript.ru/classdeveloper.mozilla.org/en/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript