1.0.0 • Published 2 years ago

my-fzz-cli v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

面向对象

* 封装、继承、多态
* 数据结构化

封装三要素

* public完全开放
* protected对子类开放
* private对自己开放

5大设计原则

* 单一职责
* 开放封闭
* 李氏置换
* 接口独立
* 依赖倒置

设计模式类型

* 创建型
* 结构型
* 行为型

常用设计模式对比

一,工厂模式

class Product {
    constructor (name){
        this.name=name
    }

    init(){
        console.log('init')
    }
}

class Creator {
    create(name){
        return new Product(name)
    }
}


const creator=new Creator();

const demo=creator.create('demo');
demo.init(); //init

一,单例模式

class SingleObject {
    login(){
        console.log('登录中')
    }
}
SingleObject.getInstance=(function() {
    let instance
    return function() {
        if(!instance){
            instance=new SingleObject()
        }
        return instance
    }
})();

let obj1=SingleObject.getInstance()
obj1.login()

let obj2=SingleObject.getInstance()
obj2.login()

console.log(obj1===obj2) // true

三,装饰器模式

class HongKong {
    plug(){
        return '香港插头'
    }
}

class  Adapter {
    constructor(){
        this.hongkong=new HongKong()
    }
    request(){
        let  info =this.hongkong.plug()
        return `${info} 转换 中国大陆插头`
    }
}

let adapter=new  Adapter();
let res=adapter.request()

console.log(res)  //香港插头 转换 中国大陆插头

四,代理模式

其他设计模式

* 原型模式
    * clone自己,生成一个新对象
    * Object.create()

* 桥接模式
    * 抽象和实现分离

* 组合模式
    * 生成树形结构,将整体和单个节点的操作抽象出来
    * 虚拟DOM中的vnode

* 享元模式
    * 共享内存
    * 相同的数据,共享使用

* 策略模式
    * 不同策略分开处理
    * 避免 if...else...

* 模板模式

* 职责链模式
    * 一步操作可以分为多个职责角色来完成
    * 角色都分开,然后用一个链串起来
    * 将发起者和各个处理者隔离

* 命令模式
    * 发送者 -》 命令对象 -》 接收者
    
    * 网页富文本编辑器操作,浏览器封装了一个命令对象(document.execCommand('bold'))

* 备忘录模式
    * 随时记录一个对象的状态变化
    * 随时可以回复之前的某个状态(如撤销功能)
    
    * 备忘录,备忘列表,编辑器

* 中介者模式

* 访问者模式
    * 将数据操作和数据结构进行分离