前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员该如何管理后宫:和女生沟通的艺术(装饰模式)

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

作者头像
木东居士
发布2018-05-25 14:36:50
4660
发布2018-05-25 14:36:50
举报

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 参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 直白型汇报
    • 1. 代码清单 ReportHireMaid类
      • 2. 代码清单 SugarReportHireMaid类
        • 3. 代码清单 Emperor类
        • 0x02 装饰型汇报
          • 1. 代码清单 Decorator抽象类
            • 2. 代码清单 DecoratorCompare类
              • 3. 代码清单 Emperor类
              • 0xFF 参考
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档