24. 设计模式

设计模式

设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的 高内聚低耦合

单例模式

一个类只能创建一个对象

作用:可以快速方便的在整个项目中共享传递数据

function King(name){
    if(king.unique == undefined){
          this.name = name
          King.unique = this
       }else{
          return King.unique
    }
}
let k1 = new King("秦始皇")
//一但外界修改King.unique,则打破单例
//King.unique = undefined
let k2 = new King("武则天")
console.log(k1 == k2)
当已经创建对象时,再次创建无效,等于第一个创建的对象

实现:用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。

//闭包实现单例
let fun = (function (name) {
        var unique
        function King(name) {
            this.name = name
        }
        if (unique == undefined) {
            unique = new King(name)
        }
        return function () {
            return unique
        }
    }("康熙"))

    let k1 = fun()
    let k2 = fun()
    console.log(k1 == k2)

打印结果:true

观察者模式(发布订阅者模式)

当主题发布消息时,所有的观察者都可以接收到该消息

主题调用函数,传递参数(数据信息),观察者定义函数

//观察者,订阅者
    let sub1 = {
        //game是一个公众号,
        //what就是公众号发给sub1的消息
        game:function(what){
            console.log("sub1->game:"+what);
        },
        girl:function(what){
            console.log("sub1->girl:"+what);
        }
    }

    let sub2 = {
        game:function(what){
            console.log("sub2->game:"+what);
        },
        boy:function(what){
            console.log("sub2->boy:"+what);
        }
    }

    let sub3 = {
        game:function(what){
            console.log("sub3->game:"+what);
        }
    }

    let sub4 = {
        nba:function(what){
            console.log("sub4->nba:"+what);
        }
    }

    //发布者,主题
    class Game{
        constructor(subs){
            this.subs = subs;
        }

        infor(what){
            this.subs.forEach(element => {
                element.game(what);
            });
        }
    }

    let g = new Game([sub1,sub2,sub3]);
    g.infor("今天王者荣耀皮肤5折");
posted @ 2022-12-10 09:35  千帆qf  阅读(31)  评论(0)    收藏  举报