七夕資深單身🐶指南,只因用錯設計模式

這是我參與8月更文挑戰的第2天,活動詳情查看:8月更文挑戰前端

七夕快來了,看着街道上年輕男女的成雙成對,臉上很倔強的表現出不屑,但內心卻默默再次唱起去年唱過的單身情歌。單身這麼多年,我最終變得真正的不快樂了。人最怕的是否認本身,思考反思良久,終於知道了我爲何從單身小王子變成單身王者。node

第一階段 天選單例

一開始的緣由是由於我喜歡單例,我願意成爲這個世界的 only one 。我大聲的告訴全世界,我是天選的單身狗。我自豪的鄙視這世界上的情侶們,同情他們失去了遊戲,同情他們失去了自由。面試

class SingleNumberOne {
    constructor(name) {
        this.name = name;
    }
    
    //靜態方法
    static getInstance(name) {
      if(!this.instance) {
        this.instance = new SingleNumberOne(name);
      }
      return this.instance;
    }
    
    sayHi() {
        console.log('我是天選的單身狗,我是世界獨一無二的一個');
    }
  }
  
  let singleOne = SingleNumberOne.getInstance('阿輝');
  let singleTwo = SingleNumberOne.getInstance('宇宙第一單身狗')
  
  console.log(singleOne === singleTwo); //true
  singleOne.sayHi();  // 我是天選的單身狗,我是世界獨一無二的一個
複製代碼

第二階段 無良代理

後面我明白了自由無用,遊戲誤事,我只是這個世界孤零零的小草,遇到了她,彷彿找到心靈的港灣。她纔是這個世界的 only one ,個人天選 girl。靠近再靠近,喜歡更喜歡,但始終不敢邁出那一步薄薄的表白。最後,我找到了好兄弟小王,讓他代爲我表達我對她的情感。npm

const aHui = {
    sayHi: '你若出水芙蓉,我喜歡你好久了'
};

const handler = {
    get(target, key) {
        return '阿輝說你很好,但我要說' + target[key];
    }
};

const aWang = new Proxy(aHui, handler);
console.log(aWang.sayHi); // 阿輝說你很好,但我要說你若出水芙蓉,我喜歡你好久了
複製代碼

最後沒有最後,結果固然沒有結果,最終小王和她成爲了情侶。隔壁小王壞事,我只怪本身學識淺薄,不懂Proxy,不懂代理模式能夠乾點其餘的事情。設計模式

第三階段 中介者

男人能伸能屈當爲人傑。失去了 only one,還有其餘的 one。 放下一片樹葉,才能看到整片森林。 我學會了主動出擊,百花叢中過,哪有不溼身。瀏覽器

我學會了給女孩子加上標籤描述,我有了對象管理,我還能根據對象的美醜作出不一樣的反應。我彷彿就是世界的中心就是渣男。babel

// 中介者,溝通全部,天下我有
var Mediator = ( function(){
    var girls = {}, // 保存全部的溝通者
        operations = {}; // 中介者能夠執行的操做
    
    operations.add = function( girl ) {
        girls[girl.isBeauty] = girls[girl.isBeauty] || [];
        girls[girl.isBeauty].push(girl);
    };

    // 溝通失敗或太醜,拉黑
    operations.lahei = function(girl) {
        var girlsArr = girls[girl.isBeauty];
        for(let i = 0; i < girlsArr.length; i++) {
            if (girlsArr[i].name === girl.name) {
                girlsArr.splice(i, 1);
                console.log(`你被${girl.name}被拉黑了`);
                break;
            }
        }
    };

    operations.sayHi = function( girl ) {
        if (girl.isBeauty) {
            const words = ['落雁沉魚','明眸皓齒','螓首蛾眉','水木清華','爽心悅目','天生麗質','天香國色','杏臉桃腮','煦色韶光','杏腮桃臉','杏雨梨雲','涎玉沫珠','魚沉雁落','宜嗔宜喜','旖旎風光','遠山芙蓉','豔色絕世','餘霞成綺','宜喜宜嗔','豔紫妖紅','硃脣皓齒','左家嬌女','章臺楊柳','阿嬌金屋','閉月羞花','春色滿園','春深似海','彩雲易散','奼紫嫣紅','鬥美夸麗','盡態極妍','蛾眉皓齒','國色天香','花顏月貌','絕色佳人','天生麗質','慧質蘭心','秀外慧中','暗香盈袖','閉月羞花','沉魚落雁','傾國傾城','溫婉嫺淑','千嬌百媚','儀態萬千','美豔絕世','國色天香','花容月貌','明目皓齒','淡掃峨眉','清豔脫俗','香肌玉膚','清麗絕俗','儀態萬端','婉風流轉','美撼凡塵']
            const idx = Math.ceil(Math.random() * words.length);
            console.log(`阿輝:${girl.name}, 你是如此的${words[idx]},讓我難以忘記`);
        } else {
            console.log('阿輝:嗯');
        }
        console.log('------------');
    };
   
    var reciveMessage = function(){
        var message = Array.prototype.shift.call( arguments ); // arguments 的第一個參數爲消息名稱
        operations[ message ].apply( this, arguments );
    };

    return {
        reciveMessage: reciveMessage
    }
})();

function Girl( name, isBeauty ){
    this.name = name;
    this.isBeauty = isBeauty;
};

Girl.prototype.sayHi = function(){
    console.log('女:hi,你好,我是', this.name);
    Mediator.reciveMessage('sayHi', this ); // 給渣男發送消息
};

Girl.prototype.lahei = function(){
    Mediator.reciveMessage('lahei', this ); // 給渣男發送消息
};

var meetGirl = function(name, isBeauty){
    var girl= new Girl(name, isBeauty);
    Mediator.reciveMessage('add', girl);
    return girl;
};

const xiaoqiao = meetGirl('小喬', true);
const xisi = meetGirl('西施', true);
const diaocan = meetGirl('貂蟬', true);

xiaoqiao.sayHi();
xisi.sayHi();
diaocan.sayHi();

const dongshi = meetGirl('東施',  false);
dongshi.sayHi();
dongshi.lahei();

複製代碼

如魚得水的效果以下:markdown

女:hi,你好,我是 小喬
阿輝:小喬, 你是如此的美撼凡塵,讓我難以忘記

------------
女:hi,你好,我是 西施
阿輝:西施, 你是如此的清麗絕俗,讓我難以忘記

------------
女:hi,你好,我是 貂蟬
阿輝:貂蟬, 你是如此的溫婉嫺淑,讓我難以忘記

------------
女:hi,你好,我是 東施
阿輝:嗯

------------
你被東施拉黑了
複製代碼

彷彿脫單就在那麼一瞬間,但臨門一腳的時候,西施 和小喬 一溝通,發現我竟然如此多頭通信,實錘渣男。so,竹籃打水一場空,終於仍是功虧一簣。用情不專,管理複雜度過高,中介者模式的確不適合。app

第四階段 裝飾無用

那我到底該如何作呢,這個時候,室友小周過來告訴我,你應該學會裝飾本身,不要這麼坦誠。有道理,我猛拍小夥子。正所謂老天關了我一個門,兄弟卻給我開了一扇窗。最終我學會了裝飾器,我學會了裝*。dom

function handsome(target, name, descriptor) {
    const func = descriptor.value;
    if (typeof func === 'function') {
        descriptor.value = function(...args) {
            console.log('------')
            console.log('我很帥,我會打籃球')
            const results = func.apply(this, args);
            return results;
        }
    }
}

class Person {
    @handsome
    sayHi() {
        console.log('------')
        console.log('其實,我僅僅只是頗有💰')
    }
}

const aHui = new Person();
aHui.sayHi();
複製代碼

你看完學會了打扮,變得很😎。

------
我很帥,我會打籃球

------
其實,我僅僅只是頗有💰
複製代碼

我還學會了連環計。

function humor(target, name, descriptor) {
    const func = descriptor.value;
    if (typeof func === 'function') {
        descriptor.value = function(...args) {
            console.log('------')
            console.log('我會講冷笑話')
            console.log('一隻未成年小龍被爸爸揍了,由於它偷當作龍電影。')
            const results = func.apply(this, args);
            return results;
        }
    }
}

class Person {
    @humor
    @handsome
    sayHi() {
        console.log('------')
        console.log('其實,我僅僅只是頗有💰')
    }
}

const aHui = new Person();
aHui.sayHi();
複製代碼

連環技能展現以下:

------
我會講冷笑話
一隻未成年小龍被爸爸揍了,由於它偷當作龍電影。

------
我很帥,我會打籃球

------
其實,我僅僅只是頗有💰
複製代碼

注:以上代碼不能直接在瀏覽器執行,能夠按如下步驟

一、npm install @babel/core @babel/node @babel/plugin-proposal-decorators

二、建立 .babelrc,內容以下:

{ "plugins": [ ["@babel/plugin-proposal-decorators", { "legacy": true }] ] }

三、npx babel-node fileName.js

本覺得苦其體膚必然換來脫胎換骨,但是妹子卻說讀不懂個人心,不知道我究竟是一個怎麼樣的靈魂。我苦恨蒼天,我只恨我爲何不直接告訴妹子,我沒有靈魂,我只是單純的有錢。我終於懂得了我不須要裝,但是妹子卻已離我而去。

最後

兜兜轉轉,恍恍惚惚,生爲凡人,學會設計模式,搞定了 computer,卻單身且寂寞。最後,七夕,祝有情人終成眷屬,無情人單身也快樂。

寫文不易,歡迎點贊、收藏、關注。其餘可能你有興趣的文章。

歡迎關注同名公衆號【對馬彈琴】。

相關文章
相關標籤/搜索