常見設計模式

工廠模式

<script>
    function factory(opts) {
        var person ={
            name: opts
        }
        person.sayName = function () {
            console.log('name:'+opts)
        }
        return person//需要return 出來
    }

    var p1 = factory('nick');
</script>

構造函數模式

<script>
    function Person(name) {
        this.name = name;
    }
    Person.prototype = {
        say: function () {
            console.log(this.name)
        }
    }
    var p2 = new Person('Rick');
</script>

模塊模式

<script>
    var Person = (function(){
        function changeName(name) {
            this.name = name;
        }
        function sayName() {
            console.log(this.name)
        }
        return{
            change: changeName,
            say: sayName
        }
    })()
</script>

混合模式

<script>
    var Person = function (name,age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype = {
        sayName: function () {
            console.log(this.name)
        }
    }
    var Student = function (name,age,score) {
        Person.call(this,name,age);
        this.score = score;
    }

    //Student.prototype = Object.create(Person.prototype)
    Student.prototype = create(Person.prototype)
    function create(fn) {
        function F(){};
        F.prototype = fn;
        return new F()
    }
    
    Student.prototype.constructor = Student;
    Student.prototype.sayScore = function(){
        console.log(this.score);
    }

    var student = new Student('Nick',23,90)
</script>

單例模式

<script>
    var Person = (function () {
        var instance ;
        function init(name) {
            return {
                sayName:function () {
                    console.log(name)
                }
            }
        }
        return {
            getInstance: function (name) {
                if(!instance){
                    instance = init(name)
                }
                return instance
            }
        }
    })()
    var p1 = new Person.getInstance('nick')
    var p2 = new Person.getInstance('rick')
    console.log(p1 === p2)
</script>

發布訂閱模式

<script>
    var EventCenter = (function () {
        var event = {};

        function on(evt,handler){
            event[evt] = event[evt] || [];
            event[evt].push({
                handler: handler
            })
        }

        function fire(evt,args) {
            if(!event[evt]){
                return
            }
            for(var i = 0; i<event[evt].length;i++){
                event[evt][i].handler(args);
            }
        }

        return {
            on: on,
            fire: fire
        }
    })()

    EventCenter.on('my_event', function(data){
        console.log('my_event received...');
    });

    EventCenter.fire('my_event');
</script>

使用發布訂閱模式寫一個事件管理器,可以實現如下方式調用

<script>
    var EventManager = (function () {
        var event = {};

        function on(evt,handler){
            event[evt] = event[evt] || [];
            event[evt].push({
                handler: handler
            })
        }

        function fire(evt,args) {
            if(!event[evt]){
                return
            }
            for(var i = 0; i<event[evt].length;i++){
                event[evt][i].handler(args);
            }
        }

        function off(evt) {
            if(!event[evt]){
                return
            }else{
                event[evt] = [];
            }
        }

        return {
            on: on,
            fire: fire,
            off: off
        }
    })()

    EventManager.on('text:change', function(val){
        console.log('text:change...  now val is ' + val);
    });
    EventManager.fire('text:change', '饑人谷');
    EventManager.off('text:change');
</script>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答 1.寫出構造函數模式、混合模式、模塊模式、工廠模式、單例模式、發布訂閱模式的范例。 工廠模式,想造什么造什么...
    GarenWang閱讀 375評論 0 0
  • 寫出 構造函數模式、混合模式、模塊模式、工廠模式、單例模式、發布訂閱模式的范例。 使用發布訂閱模式寫一個事件管理器...
    coolheadedY閱讀 358評論 0 0
  • 設計模式簡單說明概念:設計模式是對軟件設計中普遍存在(反復出現)的各種問題所提出的解決方案。優點:為了可重用代碼,...
    佩佩216閱讀 209評論 0 0
  • 一、問答 (一)、寫出 構造函數模式、混合模式、模塊模式、工廠模式、單例模式、發布訂閱模式的范例。 1、工廠模式:...
    該帳號已被查封_才怪閱讀 502評論 0 0
  • 常見設計模式 構造函數模式、混合模式、模塊模式、工廠模式、單例模式、發布訂閱模式的范例。 工廠模式 factory...
    YM雨蒙閱讀 185評論 0 0