程序员该如何管理后宫:和女生沟通的艺术(装饰模式)
2016-12-27 13:14
441 查看
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类
沟通的艺术就在于你如何把一件事以其最优雅的姿态展示出来。在我们这件事上,肯定不能那样僵硬的说出来啊,我们要有策略,我先说几个我认为挺重要的点:甩锅。我们要将锅甩给大臣啊。怎么做呢,我们要这样说:我不想要,大臣一定要塞过来,不要的话大臣会伤心,以为朕要做掉他们。
合理的理由。这个怎么讲,我们要给收下这批侍女找一个合适的理由。在这点上,我们可以说找她们是来好好干活的。
消除戒心。就说那群妹子们长得丑!你想啊,为什么不让你招这么多侍女,为了不让你沾花惹草啊,但是招进来一群丑八怪呢,这不就放心了嘛。好,就这样干了。
下面就是怎么干了。为了保留最初的汇报类,我们写个子类继承一下。
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 参考
github地址:https://github.com/zhaodedong/design_pattern相关文章推荐
- 程序员该如何管理后宫:皇上选妃(代理模式)
- 程序员该如何管理后宫:朕只爱一个皇后!(单例模式)
- 程序员该如何管理后宫:怎样哄女孩儿(策略模式)
- 程序员该如何管理后宫:皇后造小人(工厂模式)
- 程序员该如何管理后宫:皇后造更多小人(抽象工厂模式)
- 如何做程序员的研发绩效管理?对话:奇虎360副总裁和原迅雷高级副总裁
- 程序员如何管理自己的知识
- 团队管理的沟通该如何有效进行?
- 项目管理系列之沟通的艺术(一)
- 个人管理:谈谈如何说“不” - 拒绝需要勇气,也需要艺术
- 2010年4月7日俱乐部活动,“如何做程序员的研发绩效管理?”主题研讨活动
- 这几年的几次“打拼”的失败的教训。程序员之间如何沟通,如何合作?!
- DATAGUARD维护:从库宕机后如何恢复到管理恢复模式
- 程序员如何平衡“技术”与“沟通”
- 个人管理:谈谈如何说“不” - 拒绝需要勇气,也需要艺术
- 程序员杂志2009精华版摘要——需求沟通中的艺术
- catia设置技巧教程:进入管理模式VS工程图模板(如何进入管理模式)
- 《技术出身,如何做好项目经理》 系列之 《程序员升级项目经理后的"管理之痒"》
- 项目管理系列之沟通的艺术(三)
- 个人管理:谈谈如何说“不” - 拒绝需要勇气,也需要艺术