vibing
vibing
## 介绍 这是一种行为设计模式,它允许对象根据对其内部状态的更改来更改其行为。状态模式类返回的对象似乎更改了其类。它为一组有限的对象提供特定于状态的逻辑,其中每种对象类型代表一种特定的状态。 状态模式的核心是: - 一个对象有状态变化 - 每次状态变化都会触发一个逻辑 ## 示例 状态模式需要一个主题类 Context 用来作为状态的载体,这个类记用于 get 和 set 状态; 状态模式需要状态类 State ,里面包含具体的状态变化的逻辑; 在生活中,红绿灯就是状态模式的体现,灯颜色的变化会触发汽车或行人的行为 先定义 State 类,它用于红绿灯颜色变化和相应的逻辑处理: ```javascript class State { constructor(color){ this.color...
它属于**行为设计模式**,定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换 一个基于策略模式的程序至少由两部分组成: - 一组策略类,策略类封装了具体的算法,并负责具体的计算过程 - 环境类 Context, Context 接受客户的请求,随后把请求委托给某一个策略类 要做到这点,说明 Context 中要维持对某个策略对象的引用; ## 示例 条条大路通罗马,现在人们出去旅游会选择各种方式,这里通过策略模式来完成不同需求下的旅游 先建立几组策略类,这些策略是旅游出行的方式,有的人有时间选择徒步,有的人旅游地方远或时间紧就选飞机,有的人享受自驾: ```javascript /** * 定义多个策略类 每个策略算法不同 */ class Foot { trigger() { console.log('时间很长 徒步旅行'); }...
这是一种至关重要的行为设计模式,它定义了对象之间的一对多依赖关系,以便当一个对象(发布者)更改其状态时,所有其他依赖对象(订阅者)都将得到通知并自动更新。这也称为PubSub(发布者/订阅者)或Event Dispatcher / Listeners Pattern。发布者有时称为主题,订阅者有时称为观察者。 如果您已经使用addEventListener或jQuery编写事件处理代码,那么您可能已经有点熟悉此模式了。它也对反应式编程(RxJS)有影响。 在示例中,我们创建了一个简单的`Subject`类,该类具有用于`Observer`从订户集合中添加和删除类的对象的方法。另外,一种`fire`将`Subject`类对象中的任何更改传播到订阅的Observers的方法。的`Observer`类,在另一方面,有其内部状态和基于从传播的改变更新其内部状态的方法`Subject`它已经预订。 ***Observer.js*** ```javascript class Subject { constructor() { this._observers = []; } subscribe(observer) { this._observers.push(observer); } unsubscribe(observer) { this._observers = this._observers.filter(obs => observer !==...
 要想使用 nest 开发,你必须了解 module ,否则无法下手,也搞不懂模块间的引用逻辑。 如果你不懂 nest 里的模块,可以这样理解:它类似组件化概念里的组件,比如在写 React 时,我们有一个根组件,一个 React 应用由多个组件构成的; 在 nest 应用中,也有一个根模块( app.module, 即上图中的 Application Module ),整个 nest 应用由多个模块和一个根模块构成; 来看一个模块: ```typescript import { Module } from...
# es6-design-patterns ## 在EcmaScript 6中实现的软件设计模式 ------ 在这个项目中,我们介绍EcmaScript 6中的软件设计模式。 图像由[StarUML](http://staruml.io/)从[staruml-design-patterns](https://github.com/loredanacirstea/staruml-design-patterns)项目中的.mdj文件生成。 ### 内容 - [创作模式](#creational-patterns) - [抽象工厂模式](#abstract-factory) - [创造者模式](#builder) - [工厂方法模式](#factory-method) - [原型模式](#prototype) - [单例模式](#singleton) - [结构模式](#structural-patterns) - [适配器模式](#adapter) - [桥接模式](#bridge) -...
babel 在转译时,会将源码分为两个部分来处理,分别是: syntax 和 api - syntax:类似对象展开、optional chain、let、const 等语法 - api:类似数组的 includes 等函数、方法 ### @babel/preset-env ```json { "presets": [ ["@babel/preset-env"] ] } ``` `preset-env`可以使用最新的 JavaScript Api ,它是许多 preset 的集合(es2015+),通过配置来智能使用 JavaScript。...
## 内存的生命周期 JavaScript作为一门高级编程语言,不像其他语言(例如C语言)需要开发者手动的去管理内存,在 JavaScript 中,系统会自动为你分配内存,在几乎任何一种语言中,内存的生命周期主要分三个阶段: - 内存分配:一般由操作系统分配内存,在有的语言中需要开发者手动操作 - 使用内存:获得操作系统分配的内存后,在内存中发生读和写的操作 - 释放内存:在程序使用完内存后,会将这部分内存释放掉供其他程序使用,在 JavaScript 中这一步由垃圾回收机制自动释放 ## 栈内存和堆内存 JavaScript数据类型分两大类:基本类型、引用类型。 字符串、数字、布尔值等属于基本类型,对象类型都属于引用类型。 `栈`是一种先进后出、后进先出的数据结构, 举个例子,乒乓球盒子(先进后出,后进先出):  `堆`是一种树的结构,所以它是“无序”的,可以从任何地方将数据取出来,比如书架里的书 ```js // 基本类型 const a = 'hello world'; //...
使用`ssh-keygen`命令生成 ssh 秘钥: ``` ➜ ~ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/aa/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase...
## 使用 docker 的 jenkins/jenkins 镜像 ### 拉取镜像 ```powershell docker pull jenkins/jenkins:2.249.3-lts-centos7 ``` 这里用的`2.249.3-lts-centos7`版本 ### 运行容器 在 run 镜像之前,需要修改下目录权限, 因为当映射本地数据卷时,`/www/jenkins_home`目录的拥有者为 root 用户,而容器中 jenkins user 的 uid 为 1000 执行下面命令 ```shell...
我们平常写`React`是这样的: ```js class HelloMessage extends React.Component { constructor(props) { super(props); this.handleClick = this.handleClick.bind(this); //绑定this } handleClick(){ console.log( this ) } render() { const { count } = this.state; return (...