七夕资深单身🐶指南,只因用错设计模式

2,184 阅读3分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

七夕快来了,看着街道上年轻男女的成双成对,脸上很倔强的表现出不屑,但心里却默默再次唱起去年唱过的单身情歌。单身这么多年,我最终变得真正的不快乐了。人最怕的是否定自己,思考反思良久,终于知道了我为什么从单身小王子变成单身王者。

第一阶段 天选单例

一开始的原因是因为我喜欢单例,我愿意成为这个世界的 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。靠近再靠近,喜欢更喜欢,但始终不敢迈出那一步薄薄的表白。最后,我找到了好兄弟小王,让他代为我表达我对她的情感。

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。 放下一片树叶,才能看到整片森林。 我学会了主动出击,百花丛中过,哪有不湿身。

我学会了给女孩子加上标签描述,我有了对象管理,我还能根据对象的美丑做出不同的反应。我仿佛就是世界的中心就是渣男。

// 中介者,沟通所有,天下我有
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();

如鱼得水的效果如下:

女:hi,你好,我是 小乔
阿辉:小乔, 你是如此的美撼凡尘,让我难以忘记

------------
女:hi,你好,我是 西施
阿辉:西施, 你是如此的清丽绝俗,让我难以忘记

------------
女:hi,你好,我是 貂蝉
阿辉:貂蝉, 你是如此的温婉娴淑,让我难以忘记

------------
女:hi,你好,我是 东施
阿辉:嗯

------------
你被东施拉黑了

仿佛脱单就在那么一瞬间,但临门一脚的时候,西施 和小乔 一沟通,发现我居然如此多头通讯,实锤渣男。so,竹篮打水一场空,终于还是功亏一篑。用情不专,管理复杂度太高,中介者模式的确不适合。

第四阶段 装饰无用

那我到底该如何做呢,这个时候,室友小周过来告诉我,你应该学会装饰自己,不要这么坦诚。有道理,我猛拍小伙子。正所谓老天关了我一个门,兄弟却给我开了一扇窗。最终我学会了装饰器,我学会了装*。

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();

连环技能展示如下:

------
我会讲冷笑话
一只未成年小龙被爸爸揍了,因为它偷看成龙电影。

------
我很帅,我会打篮球

------
其实,我仅仅只是很有💰

注:以上代码不能直接在浏览器执行,可以按以下步骤

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

2、创建 .babelrc,内容如下:

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

3、npx babel-node fileName.js

本以为苦其体肤必然换来脱胎换骨,可是妹子却说读不懂我的心,不知道我到底是一个怎么样的灵魂。我苦恨苍天,我只恨我为什么不直接告诉妹子,我没有灵魂,我只是单纯的有钱。我终于懂得了我不需要装,可是妹子却已离我而去。

最后

兜兜转转,恍恍惚惚,生为凡人,学会设计模式,搞定了 computer,却单身且寂寞。最后,七夕,祝有情人终成眷属,无情人单身也快乐。

写文不易,欢迎点赞、收藏、关注。其他可能你有兴趣的文章。

欢迎关注同名公众号【对马弹琴】。