程序员该如何管理后宫:和女生沟通的艺术(装饰模式)

0x00 前言

朕身居高位,才知,高处不胜寒,不是所有事都可以随心所欲的,身不由己的事情甚多。

比如这次,各地大臣、各位王爷、各个藩国,为了尽臣子之心而讨朕龙颜之悦,搜尽天下之美人儿上京进贡。

朕不怪这些臣子,他们有此心意,朕心甚慰。因朕自即位以来,爱民如子,操劳国事,又不荒淫无度,目前后宫除了皇后也没啥人了。比起历史上的各位皇上的确是寒碜了不少。这不,各位大臣一定要让朕多用些宫女,盛情难却啊。

这事说起来也是好事,而且是朕也不能让大臣们都寒了心了,最关键的一点,各地藩国的美人儿都送到家门口了,你能不收吗,如果不收,下面的藩国还不乱了套,搞不好以为朕闲来无事要灭了他们呢。

这事说起来是简单,但是怎么告诉皇后是个麻烦。直接告诉她:“朕要收下大臣进贡的500个侍女,其中江南美女200个,国内其余各地美人儿,异域美女100个”,这样子立马就坏事了,天都要被捅108个窟窿。所以说嘛,沟通要有技巧,朕自有朕的高招。朕下面就用装饰模式来讲一下和女生沟通的艺术。

0x01 直白型汇报

这个向皇后汇报工作呢,首先要确定的一点,朕肯定不会傻傻地直接告诉她朕要收几百个宫女。怎么也要委婉一点,至少要转移重点。咱们先看类图。

其中Report是个汇报的抽象类,没什么具体内容。ReportHireMaid类是我们要汇报的内容,此处没加任何包装。在SugarReportHireMaid类中我们增加了一些说话技巧,让皇后娘娘听起来开心一点。

下面具体的讲一下。

1. 代码清单 ReportHireMaid类

这是我要表达的直接内容,但是这样是很危险的啊,你想啊,如果这样直接告诉你媳妇,你不被打死我佩服你。我们下面改进

public class ReportHireMaid extends Report{
    @Override
    public void report() {
        System.out.println("朕要收下大臣进贡的500个侍女,其中江南美女200个,国内其余各地美人儿,异域美女100个");
    }
}

2. 代码清单 SugarReportHireMaid类

沟通的艺术就在于你如何把一件事以其最优雅的姿态展示出来。在我们这件事上,肯定不能那样僵硬的说出来啊,我们要有策略,我先说几个我认为挺重要的点:

  1. 甩锅。我们要将锅甩给大臣啊。怎么做呢,我们要这样说:我不想要,大臣一定要塞过来,不要的话大臣会伤心,以为朕要做掉他们。
  2. 合理的理由。这个怎么讲,我们要给收下这批侍女找一个合适的理由。在这点上,我们可以说找她们是来好好干活的。
  3. 消除戒心。就说那群妹子们长得丑!你想啊,为什么不让你招这么多侍女,为了不让你沾花惹草啊,但是招进来一群丑八怪呢,这不就放心了嘛。好,就这样干了。

下面就是怎么干了。为了保留最初的汇报类,我们写个子类继承一下。

public class SugarReportHireMaid extends ReportHireMaid {
    private void reportCompare() {
        System.out.println("皇后大人,你看啊,大臣们总共进贡了1万名宫女,朕如果一个不收实在是寒了众爱卿的心啊!");
    }

    private void reportSugar() {
        System.out.println("朕收下这批侍女只是为了给宫中多加点劳动力,怕平日的工作累到皇后了。朕只爱皇后一个~");
    }

    private void reportMaidNotBeautiful() {
        System.out.println("朕最后挑选的这批侍女,长相都一般般,你想啊,进来干活的,要漂亮的有什么用!");
    }

    public void report() {
        reportCompare();
        reportSugar();
        reportMaidNotBeautiful();
        super.report();
    }
}

3. 代码清单 Emperor类

public class Emperor {

    public static void main(String[] args) {
        Report report = new SugarReportHireMaid();
        report.report();
    }
}

执行结果。这下子没事了吧,不会被皇后弄死了。

皇后大人,你看啊,大臣们总共进贡了1万名宫女,朕如果一个不收实在是寒了众爱卿的心啊!
朕收下这批侍女只是为了给宫中多加点劳动力,怕平日的工作累到皇后了。朕只爱皇后一个~
朕最后挑选的这批侍女,长相都一般般,你想啊,进来干活的,要漂亮的有什么用!
朕要收下大臣进贡的500个侍女,其中江南美女200个,国内其余各地美人儿,异域美女100个

但是问题来了:现在我们只有三个比较好的理由和说辞,如果理由比较多呢,有30个怎么办,在一个子类里面写30个理由毕竟不太好,因为我们可能要来回组合这些不同的理由来应对不同的场景。

那我们就继续继承呗,这是个不错的方案,但是毕竟不太灵活,而且如果如果真来个30层的继承,那不就蒙圈了。所以下面冒出来了装饰模式

0x02 装饰型汇报

装饰模式可以比较优雅地解决上面的问题。我们先上个类图看一下。

我们加了一个Decorator抽象类,它是为了封装Report类,其实这和代理模式很相近,装饰类也可以理解是一个特殊的代理类。真实的执行者还是被代理的角色ReportHireMaid。

下面具体看一下每个类。Report和ReportHireMaid是不变的,然后把SugarReportHireMaid删除了,由我们的装饰类来代替它的功能。

1. 代码清单 Decorator抽象类

Decorator抽象类是对Report做了一层封装。

看到没,装饰类还是把动作的执行委托给需要装饰的对象,Decorator抽象类的目的很简单,就是要让子类来封装Report的子类,怎么封装?重写report方法!

public abstract class Decorator extends Report{
    private Report rt;

    public Decorator(Report rt) {
        this.rt = rt;
    }

    public void report() {
        this.rt.report();
    }
}

2. 代码清单 DecoratorCompare类

这是我们的具体的装饰内容。其它的装饰类也比较类似,我们只列出来一个。

DecoratorCompare类重写了report方法,先调用具体装饰类的装饰方法reportCompare,然后再调用具体构件的方法,

public class DecoratorCompare extends Decorator{

    public DecoratorCompare(Report rt) {
        super(rt);
    }

    private void reportCompare() {
        System.out.println("皇后大人,你看啊,大臣们总共进贡了1万名宫女,朕如果一个不收实在是寒了众爱卿的心啊!");
    }

    public void report() {
        this.reportCompare();
        super.report();
    }
}

3. 代码清单 Emperor类

现在看一下Emperor类,是不是和之前很不一样了,我们想对表达做什么装饰,就加一层装饰类就行了,而且顺序很灵活。

public class Emperor {

    public static void main(String[] args) {
        Report rt = new ReportHireMaid();
        rt = new DecoratorSugar(rt);
        rt = new DecoratorCompare(rt);
        rt = new DecoratorNotBeautiful(rt);
        rt.report();
    }
}

我们看一下运行结果:

皇后大人,你看啊,大臣们总共进贡了1万名宫女,朕如果一个不收实在是寒了众爱卿的心啊!
朕收下这批侍女只是为了给宫中多加点劳动力,怕平日的工作累到皇后了。朕只爱皇后一个~
朕最后挑选的这批侍女,长相都一般般,你想啊,进来干活的,要漂亮的有什么用!
朕要收下大臣进贡的500个侍女,其中江南美女200个,国内其余各地美人儿,异域美女100个

0xFF 参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞总聊IT

大数据那些事(10):李逵麻子,李鬼坑人--BigTable的数据模型

今天我们回归技术路线,讲讲Google三驾马车里的BigTable。以前有个说法叫做麻子不叫麻子,叫坑人。取其原意是满脸是坑的人,谐音表示人被坑了。我们知道水浒...

4127
来自专栏小樱的经验随笔

1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】

1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2709 ...

3258
来自专栏数据结构与算法

03:不高兴的津津

03:不高兴的津津 总时间限制:1000ms内存限制:65536kB描述 津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名...

3905
来自专栏安智客

密码发展史之古典密码

密码(Cryptology)是一种用来混淆的技术,它希望将正常的、可识别的信息转变为无法识别的信息。密码学是一个即古老又新兴的学科,密码学一词源自希腊文“kry...

2647
来自专栏HansBug's Lab

再看最短路算法 1 —— 单源最短路

学了多年的算法,最短路问题相当之常见———— 好久没写过最短路的问题了,直到昨天闲的无聊来了一题——BZOJ3402(HansBug:额才发现我弱到只能刷水的地...

3766
来自专栏牛客网

网易考拉前端开奖啦~分享一波面筋

内推投了十几二十家公司,大多没消息。BAT都没有面(百度投了没消息,腾讯打了一次电话来没接到就变灰了,阿里问我有没兴趣改测试岗(表示没兴趣))。于是最终面试的就...

1142
来自专栏腾讯Bugly的专栏

你为什么需要 Kotlin

导语 在当今的互联网时代,新技术犹如雨后春笋般层出不穷。精神哥之前也和开发同学一起讨论过程序员的成长离不开哪些软技能?当时很多人都有提到探究新技术对程序员的重要...

4314
来自专栏飞总聊IT

大数据那些事(10):李逵麻子,李鬼坑人--BigTable的数据模型

今天我们回归技术路线,讲讲Google三驾马车里的BigTable。以前有个说法叫做麻子不叫麻子,叫坑人。取其原意是满脸是坑的人,谐音表示人被坑了。我们知道水浒...

30710
来自专栏GIS讲堂

高考季,献给各位学子

今天,举国瞩目的高考已经结束了,在这样的时刻“LZUGIS”携手“GIS讲堂”为大家从GIS和数据方面给大家做一个分析。

1086
来自专栏恰童鞋骚年

探索抽象工厂模式(Abstract Factory)——TerryLee

原文地址:http://terrylee.cnblogs.com/archive/2005/12/13/295965.html

853

扫码关注云+社区

领取腾讯云代金券