1.0.0 • Published 2 years ago
my-fzz-cli v1.0.0
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
面向对象
* 封装、继承、多态
* 数据结构化
封装三要素
* 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'))
* 备忘录模式
* 随时记录一个对象的状态变化
* 随时可以回复之前的某个状态(如撤销功能)
* 备忘录,备忘列表,编辑器
* 中介者模式
* 访问者模式
* 将数据操作和数据结构进行分离
1.0.0
2 years ago