zoukankan      html  css  js  c++  java
  • 前端常用设计模式

    工厂模式

    工厂模式就是用来批量生产对象的

    js代码:

            class People{ //工厂
                constructor(name,age) {//原材料
                    this.name = name
                    this.age = age
                    this.init()
                }
                init(){//进行加工
                    console.log(this.name,this.age)
                }
            }
            let People1 = new People('张三',20) //创建第一个实例
            let People2 = new People('李四',22) //创建第二个实例
            console.log(People1.constructor === People2.constructor)//true 都来自一个工厂

    单例模式

    只允许存在一个实例

    js代码:

            class People {
                constructor(name, age) {
                    this.name = name
                    this.age = age
                }
            }
            let danli = (()=>{//使用闭包实现单例
                let obj = new People('张三',20)
                return ()=>{
                    return obj
                }
            })()
            let People1 = danli() //创建实例1
            let People2 = danli() //创建实例2
            console.log(People1) //People {name: "张三", age: 20}
            console.log(People2) //People {name: "张三", age: 20}
            console.log(People1.constructor === People2.constructor) //true 

    观察者模式

    又称发布订阅者模式,案例 ---- 事件监听,一个元素绑定多个同类型事件,元素是被观察者(发布者),而绑定的事件就是观察者(订阅者),当被观察者状态发生改变,被观察者随之改变

    js代码:

            //这里document就是被观察者(发布者)
            document.addEventListener('click',()=>{ //观察者(订阅者)
                console.log(1)
            })
            document.addEventListener('click',()=>{ //观察者(订阅者)
                console.log(1)
            })
            document.addEventListener('click',()=>{ //观察者(订阅者)
                console.log(1)
            })
            document.addEventListener('click',()=>{ //观察者(订阅者)
                console.log(1)
            })
            //当被观察者状态发生改变时,观察者状态也随之改变

    策略模式

    定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换,从而避免使用很多if语句

    比如公司的年终奖是根据员工的工资和绩效来考核的,绩效为A的人,年终奖为工资的4倍,绩效为B的人,年终奖为工资的3倍,绩效为C的人,年终奖为工资的2倍(摘自网络案例)

    js代码:

            let obj = { //封装算法
                a:(pic)=>{
                    return pic*4
                },
                b:(pic)=>{
                    return pic*3
                },
                c:(pic)=>{
                    return pic*2
                }
            }
            let obj1 = (o,pic)=>{
                return obj[o](pic)
            }
            console.log(obj1('b',3000)) //9000
            console.log(obj1('a',5000)) //20000

     

  • 相关阅读:
    redis -- RDB
    redis--数据库
    redis-慢查询日志
    redis 订阅与发布
    redis 事务
    redis 事件
    redis--服务器与客户端
    readis 内部数据结构
    Redis数据类型
    Docker 限制容器资源
  • 原文地址:https://www.cnblogs.com/zlf1914/p/13071544.html
Copyright © 2011-2022 走看看