推荐文章:最易懂的设计模式系列解析:简单工厂模式:https://blog.csdn.net/carson_ho/article/details/52343584
下面介绍的是一种最基本的一种工厂方法模式
女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,但是待的时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?
别忘了她是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创造人,具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的:
第一次烤泥人,滋滋滋滋~~,感觉应该收了,往地上一扔,biubiu,一个白人诞生了,没靠手!
第二次烤泥人,滋滋滋滋~~,上次都没烤熟,这次多烤会儿,往地上一扔,嘿,熟过头了,黑人哪!
第三次烤泥人,滋滋滋滋~~,一边烤一边看着,嘿,刚刚好,Perfect! 优品,黄色人种!
用代码来实现:
目录:
Human.java
package No5_FactoryMethodPattern; /** * 定义一个人的接口,作为一个人,需要有下面三种动作 */ public interface Human { public void laugh(); public void cry(); public void talk(); }
YellowHuman.java
package No5_FactoryMethodPattern; /** * 定义具体的人种 * 黄色人种 */ public class YellowHuman implements Human { @Override public void laugh() { System.out.println("黄种人会大笑"); } @Override public void cry() { System.out.println("黄种人会哭"); } @Override public void talk() { System.out.println("黄种人会说话,一般说的都是双字节"); } }
WhiteHuman.java
package No5_FactoryMethodPattern; /** * 定义到具体的人种 * 白色人种 */ public class WhiteHuman implements Human { @Override public void laugh() { System.out.println("白种人会大笑"); } @Override public void cry() { System.out.println("白种人会哭"); } @Override public void talk() { System.out.println("白种人会说话,一般都是单字节的"); } }
BlackHuman.java
package No5_FactoryMethodPattern; /** * 定义到具体的人种 * 黑色人种 */ public class BlackHuman implements Human { @Override public void laugh() { System.out.println("黑种人会大笑"); } @Override public void cry() { System.out.println("黑种人会哭"); } @Override public void talk() { System.out.println("黑种人会说话"); } }
HumanFactory.java
package No5_FactoryMethodPattern; /** * 今天讲女娲造人的故事,这个故事梗概是这样的: * 很久很久以前,盘古开辟了天地,用身躯造出了日月星辰、山川草木,天地一片繁华 * 有一天,女娲下界走了一遭,哎,太寂寞,太孤独了,没个会笑的、会哭的、会说话的东东 * 那怎么办呢?不用愁,女娲,神仙呀,造出来呀,然后捏泥巴,放八卦炉(后来这个成了太白金星的宝贝) * 中烤,于是就有了人: * 我们把这个生产人的过程用java程序表现出来: */ public class HumanFactory { //定义一个烤箱,泥巴塞进去,人就出来了 public static Human createHuman(Class c){ Human human = null; try{ human = (Human)Class.forName(c.getName()).newInstance();//产生一个人种 }catch(InstantiationException e){ System.out.println("必须指定人种的颜色"); }catch(ClassNotFoundException e){ System.out.println("混蛋,你指定的人种找不到!"); } catch (IllegalAccessException e) { System.out.println("人种定义错误"); } return human; } }
NvWa.java
package No5_FactoryMethodPattern; /** * 这是女娲 */ public class NvWa { public static void main(String[] args) { System.out.println("-----造出的第一批人是这样的:白色人种-----"); Human whiteHuman = HumanFactory.createHuman(WhiteHuman.class); whiteHuman.cry(); whiteHuman.laugh(); whiteHuman.talk(); System.out.println("-----造出的第二批人是这样的:黑色人种-----"); Human blackHuman = HumanFactory.createHuman(BlackHuman.class); blackHuman.cry(); blackHuman.laugh(); blackHuman.talk(); System.out.println("-----造出的第三批人是这样的:黄色人种-----"); Human yellowHuman = HumanFactory.createHuman(YellowHuman.class); yellowHuman.cry(); yellowHuman.laugh(); yellowHuman.talk(); } }
对代码的解读都写在注释中了,仔细阅读代码后往下看
定义(百度百科):
工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。
工厂方法经常用在以下两种情况中:
代码例子摘自《24种设计模式与6大设计原则》