0x00 前言

朕日常忙于公务,难免偶尔会冷落了皇后,为了不让皇后太无聊,朕决定来教皇后怎么造小人!

别误会,这个小人不是生出来的,是造出来的。朕将这种造小人的仙术教给了皇后,皇后就造了下面的一堆堆小人,这下子就热闹了,皇宫里面跑了一堆的小人。

现有的小人种类:

  • 红色小人
  • 蓝色小人
  • 黑色小人

我暂且认为女人的脑子比男人笨,皇后也不能例外,造小人的方式也比较low。下面朕就详细描述一下皇后是怎么造小人的,然后再分享一下朕是如果通过工厂模式更厉害地造小人的。

0x01 皇后造小人

都说女人是**无脑,此言不虚。我这啥媳妇造小人的时候方法也显得有点笨。

上段是为了场景需要,请忽略,yyj怎么可能比我笨…

yyj的策略很直观,需要几种小人,就创建几个小人的类,然后在造小人的时候就new不同的小人就行。先上个图。

1. 代码清单 RedToy类

这是红色小人类,挺简单的。

public class RedToy {public void getColor() {System.out.println("我是小红人~");}public void talk() {System.out.println("小红人性格很好,说话也讨人喜欢~~");}
}

蓝色小人和黑色小人代码没什么变化,就不再列举出来了。

2. 代码清单 Queen类

Queen类中,皇后需要造哪种小人,就new哪种小人就行了。

public class Queen {public static void main(String[] args) {System.out.println("------造一批小黑人!------");BlackToy blackToy1 = new BlackToy();blackToy1.getColor();blackToy1.talk();System.out.println("------造一批小蓝人!------");BlueToy blueToy1 = new BlueToy();blueToy1.getColor();blueToy1.talk();System.out.println("------造一批小红人!------");RedToy redToy1 = new RedToy();redToy1.getColor();redToy1.talk();}
}

我们看一下执行结果。

------造一批小黑人!------
我是小黑人~
小黑人方言太重,平常人听不懂!
------造一批小蓝人!------
我是小蓝人~
小蓝人说话说不停,太吵了!~
------造一批小红人!------
我是小红人~
小红人性格很好,说话也讨人喜欢~~

哎呀呀,这下子一堆小人出来了。

那么问题来了,目前只有三种小人,皇后造小人的时候还hold住,如果现在需要创建个七八十种小人,我不太能确定这个工作对脑力的要求有多高。关键是,那么多种小人管理起来也不容易啊,太烦人了。

下面就来见识一下朕的高招。

0x02 工厂模式造小人

朕最初的诉求很简单,就是怎么样方便地造小人!朕这么日理万机,什么事都亲力亲为还不累死,那么多种小人,每造一种就得使用相应造小人的方法,太不符合朕的身份。

其实解决方法也很简单,朕弄一个造小人的阴阳炉(是不是很厉害的样子)!在阴阳炉里面有一个小人清单,你告诉这个阴阳炉造什么样的小人,这个阴阳炉帮你造就行了。解放朕的生产力!

下面就先看一下整体的类图。是不是比上一版复杂了一丢丢?

补充一下:下面的代码就是一个简单的工厂类了~

1. 代码清单 Queen类

先不讲我们的阴阳炉和小人的设计方法,我们先看看怎么来使用这个阴阳炉。

看代码,这下皇后就省事了,先使用大召唤术召唤出我们的阴阳炉,然后告诉它,去给本宫造一个小黑人,然后阴阳炉就屁颠屁颠地去造一个小黑人。大家可以对比一下之前的皇后类代码,现在是不是轻松多了。

public class Queen {public static void main(String[] args) {//创建一个阴阳炉,阴阳炉负责造小人AbstractToyFactory toyFactory = new YinYangToyFactory();System.out.println("------造一批小蓝人!------");Toy blueToy = toyFactory.createToy(BlueToy.class);blueToy.getColor();blueToy.talk();System.out.println("------造一批小黑人!------");Toy blackToy = toyFactory.createToy(BlackToy.class);blackToy.getColor();blackToy.talk();System.out.println("------造一批小红人!------");Toy redToy = toyFactory.createToy(RedToy.class);redToy.getColor();redToy.talk();}
}

看一下运行结果:

------造一批小蓝人!------
我是小蓝人~
小蓝人说话说不停,太吵了!~
------造一批小黑人!------
我是小黑人~
小黑人方言太重,平常人听不懂!
------造一批小红人!------
我是小红人~
小红人性格很好,说话也讨人喜欢~~

看过具体的效果之后,我们来讲一下下面的几块代码实现。

2. 代码清单 YinYangToyFactory类

YinYangToyFactory 阴阳炉的代码没多少,只有一个根据类名创建相应类的方法,我们想造什么小人,就传进来相应的类名就行了。

public class YinYangToyFactory extends AbstractToyFactory {@Overridepublic <T extends Toy> T createToy(Class<T> c) {Toy toy = null;try {toy = (Toy) Class.forName(c.getName()).newInstance();} catch (Exception e) {System.out.println(e);}return (T) toy;}
}

YinYangToyFactory继承了AbstractToyFactory抽象类。AbstractToyFactory中没什么东西,下面就列出来看一下。

3. 代码清单 AbstractToyFactory抽象类

public abstract class AbstractToyFactory {public abstract <T extends  Toy> T createToy(Class<T> c);
}

4. 代码清单 Toy接口

为了方便更好的管理小人,我们加一个小人接口。这个也挺简单的,所有的小人实现这个接口就行了。

public interface Toy {public void getColor();public void talk();
}

5. 代码清单 BlueToy类

小人类一直没什么变化。

public class BlueToy implements Toy{@Overridepublic void getColor() {System.out.println("我是小蓝人~");}@Overridepublic void talk() {System.out.println("小蓝人说话说不停,太吵了!~");}
}

0xFF 参考

  • github地址:https://github.com/zhaodedong/design_pattern

2016-11-11 12:34:12 hzct


原创文章,转载请注明: 转载自赵德栋的 博客

个人主页 CSDN博客

作者:赵德栋,作者介绍

程序员该如何管理后宫:皇后造小人(工厂模式)相关推荐

  1. 程序员该如何管理后宫:朕只爱一个皇后!(单例模式)

    0x00 前言 朕虽花心,却深明事理.一山不容二虎,一国不容二母!因此不论朕有多少爱妃(我是逗逼啊,怎么可能还有爱妃,一个皇后就够了!),但是朕的皇后只有一个,这点毋庸置疑. 那么如何来体现朕的皇后的 ...

  2. 程序员该如何管理后宫:怎样哄女孩儿(策略模式)

    0x00 前言 试问,哪个帝王不想开疆拓土,成就万世之霸业,流传千古?! 朕,虽坐享盛世,仍不忘对外扩张以彰显国威. 近日上朝,有大臣上奏,近邻女儿国因缺乏壮丁,国力衰弱,正是入侵的最好时机.朕当然批 ...

  3. 程序员生存定律--管理向左,技术向右

    点击打开链接 一个程序员在考虑增值时无法回避的一个根本问题是到底是做技术还是做管理.当然也有些职位会介于两者之间比如架构师,但我们暂时不去做细分,而是用简单的二分法. 这种基本方向上的选择对后续很多细 ...

  4. 我35岁,程序员,“中危”后帮别人规划人生

    35 岁,有妻有子,有房有车,但却没有上升空间了. 做程序员,35 岁是个"终极门槛",如果不能往上做管理,可能就要重新考虑是否需要转行--如果不主动考虑,也很可能被公司主动&qu ...

  5. 《告别失控:软件开发团队管理必读》一一第1章 程序员为何难以管理

    第1章 程序员为何难以管理 告别失控:软件开发团队管理必读 程序设计作为一种严肃的职业已经存在60多年了.在美国,从事程序设计工作的程序员数以百万计,而全球这个数字更大.这些数字还不包括人数众多的学生 ...

  6. 程序员的时间管理计划

    目录 01优秀程序员的时间概念 02优秀程序员的时间分类 03时间管理法则 最近大家都在忙着做什么呢?忙着找工作?忙着工作?抑或是忙着当一条咸鱼,但是每天都给自己贴上一条正在忙着思考人生的标签? 不管 ...

  7. 程序员如何在工作后找到女朋友?

    点击上方"程序IT圈",选择"置顶公众号" 关键时刻,第一时间送达! 本文来源于公众号:计算机与网络安全 https://mp.weixin.qq.com/s/ ...

  8. 写给程序员的时间管理

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 图片源自:unsplash 作者 艾力 转载自公众号:Leetcode名企之路 如 ...

  9. 程序员的天堂还是地狱:论东南亚BC工厂

    一分耕耘一分收获,天下没有掉馅饼的好事.--博主题记 CSDN审核较严格,在隔壁发表成功,各位老哥可以阅读一下,谨防上当受骗. 程序员的天堂还是地狱:论东南亚BC工厂 希望读了本文的读者,可以深刻认识 ...

最新文章

  1. 解析激光雷达中时序融合的研究现状和发展方向
  2. 一个让你敲代码的同时,找回童年乐趣的 IntelliJ 插件
  3. linux apt-get dpkg,linux的sudo apt-get install 和dpkg -i package.deb命令
  4. Activiti工作流学习笔记01
  5. OpenStack基金会 ( OSF)演进为开源基础设施基金会
  6. JanusGraph快速开始
  7. CMD编写bat病毒
  8. 几率大的多线程面试题(含答案)
  9. Activity任务栈
  10. cmake的aux_source_directory
  11. [转载]jQuery诞生记-原理与机制
  12. java pppoe_PPPoE拨号流程
  13. 新浪微博PC端模拟登陆
  14. vs2013 编译 该文件已在源编辑器之外被修改
  15. CI获取用户真实IP地址
  16. 用户画像标签数据存储之Elasticsearch存储
  17. JQuery滚动条及位置相关方法
  18. 插画师的配色灵感分享
  19. 防止DDOS攻击的策略
  20. matlab如何拼接矩阵

热门文章

  1. 计算机培训微课设计与实现,微课设计与制作
  2. 十分钟读懂游戏研发、发行、渠道那些事儿
  3. 【Win10|.net framework3.5】安装方法(附Win10 1909版安装包)
  4. 上海国家会计学院(SNAI)亚利桑那州立大学(ASU)合作办学EMBA项目打造兼具金融财务和服务管理专长的领袖人才!
  5. 巴菲特致股东的一封信:1988年
  6. VBox虚拟机Linux安装与配置
  7. 售后服务维修系统哪个好?推荐的修报修系统
  8. Java基础(学习笔记)
  9. 智合同丨什么是智能合同?
  10. (Python、mysql、机器学习与数据挖掘)小硕的自我修养进阶