程序员该如何管理后宫:皇后造小人(工厂模式)
2016-11-11 16:47
363 查看
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 { @Override public <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{ @Override public void getColor() { System.out.println("我是小蓝人~"); } @Override public void talk() { System.out.println("小蓝人说话说不停,太吵了!~"); } }
0xFF 参考
github地址:https://github.com/zhaodedong/design_pattern2016-11-11 12:34:12 hzct
原创文章,转载请注明: 转载自赵德栋的 博客
个人主页 CSDN博客
作者:赵德栋,作者介绍
相关文章推荐
- 程序员该如何管理后宫:朕只爱一个皇后!(单例模式)
- 程序员该如何管理后宫:皇后造更多小人(抽象工厂模式)
- 程序员该如何管理后宫:皇上选妃(代理模式)
- 程序员该如何管理后宫:怎样哄女孩儿(策略模式)
- 程序员该如何管理后宫:和女生沟通的艺术(装饰模式)
- 程序员七夕如何表白:朕只爱一个皇后!(单例模式)
- 【观点】如何管理你的程序员
- 程序员如何管理好自己的思维?
- 2010年4月7日俱乐部活动,“如何做程序员的研发绩效管理?”主题研讨活动
- 如何做程序员的研发绩效管理?对话:奇虎360副总裁和原迅雷高级副总裁
- (OpenSessionInView模式)spring对session和事务的管理以及OpenSessionInViewFilter是如何工作的
- 程序员如何管理好自己的思维?
- 程序员如何管理好自己的思维?
- 程序员的偷懒 -- 设计模式之抽象工厂
- 程序员如何管理好自己的思维?
- 程序员如何管理好自己的思维?
- 程序员如何管理好自己的思维?
- catia设置技巧教程:进入管理模式VS工程图模板(如何进入管理模式)
- 程序员的偷懒 -- 设计模式之抽象工厂
- DATAGUARD维护:从库宕机后如何恢复到管理恢复模式