【趣解】工厂模式之简单工厂、工厂方法模式

编程入门 行业动态 更新时间:2024-10-28 16:17:59

【趣解】<a href=https://www.elefans.com/category/jswz/34/1770822.html style=工厂模式之简单工厂、工厂方法模式"/>

【趣解】工厂模式之简单工厂、工厂方法模式

今天,我们以找对象为例,分析一下工厂模式中的简单工厂与工厂方法模式。

众所周知,找对象是个很复杂的过程。我们不使用工厂模式来模拟一下找对象过程。

代码如下:

public class FindLoverNoFactory {//每个人一开始没有男/女朋友private static People b_gFriend = null;public static void main(String[] args) {//如果需要找一个男/女朋友//以男生为例(女生同样的道理)//1.心中开始构想一个女朋友Girl dreamGril = new Girl();//2.为这个女生设置名称dreamGril.setName("小美");//3.为这个女生设置年龄dreamGril.setAge(20);//构想完成之后找到自己的女朋友啦!b_gFriend = dreamGril;}
}
从代码中可以看到,如果要找到一个对象,得需要N步,好复杂啊!感觉好浪费时间啊!于是,许多人跑到政府那里说,找对象太辛苦啦,耽误我工作!然后政府一想,确实应该把找对象这个过程变简单些,那样他们才有时间去工作增加国家GDP。

过了一段时间,“非诚勿扰”这类婚介中心出来了,分为“男朋友”部门,“女朋友”部门,分别解决女生和男生找对象的问题。

新建一个婚介中心,代码如下:

//婚介中心
public class LoverCenter{public static People findLover(String sex){if("男".equals(sex)){//“男朋友”部门Boy b = new Boy();b.setName("小王");b.setAge(20);return b;}else if("女".equals(sex)){//“女朋友”部门Girl g = new Girl();g.setName("小美");g.setAge(20);return g;}else{return null;}}
}
然后我们再来模拟一下找对象过程( 简单工厂模式)。

public class FindLoverSimpleFactory {//每个人一开始没有男/女朋友private static People b_gFriend = null;public static void main(String[] args) {//如果男生需要找一个女朋友,直接找婚介中心分配即可。(女生同理)b_gFriend = LoverCenter.findLover("女");}
}
哇!找对象居然这么简单了。

可是好景不长,大家一看既然婚介中心找对象这么简单了,那么,也为自己的宠物找对象!

于是婚介中心又添加了“小猫”部门,“小狗”部门........

久而久之,政府感觉好烦啊,因为这对于婚介中心来说,就违反了“把事情变简单”的目的(违反面向对象得开闭原则)。

政府又做了一个伟大的决定,把部门分开,各自单独建立一个中心,你们就别来烦我了!

代码如下:

//婚介中心
public interface LoverCenter{public People findLover();
}
//女性婚介中心
public class GirlLoverCenter implements LoverCenter{@Overridepublic People findLover() {Boy b = new Boy();b.setName("小王");b.setAge(20);return b;}
}
//男性婚介中心
public class BoyLoverCenter implements LoverCenter{@Overridepublic People findLover() {Girl g = new Girl();g.setName("小美");g.setAge(20);return g;}
}
然后我们再来模拟一下找对象过程( 工厂方法模式)。

public class FindLoverFactoryMethod {//每个人一开始没有男/女朋友private static People b_gFriend = null;public static void main(String[] args) {//如果需要找一个男/女朋友//以男生为例(女生同样的道理)LoverCenter loverCenter = new BoyLoverCenter();b_gFriend = loverCenter.findLover();}
}
于是,各类婚介中心分离开来,政府也清净了很多。

以上趣解了两种工厂模式,我们来看下UML图

1.无工厂模式


2.普通工厂

3.工厂方法


总结:

简单工厂模式VS工厂方法模式

1)结构复杂度:简单工厂模式优胜。 

2)代码复杂度:简单工厂模式占优。 

3)管理难度: 工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式, 把核心放在一个实类上。可拓展性更好,易于管理。

根据设计理论建议用工厂方法模式,但是实际上,我们一般都是使用简单工厂模式!


更多推荐

【趣解】工厂模式之简单工厂、工厂方法模式

本文发布于:2024-02-12 10:13:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1687339.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:工厂   模式   简单   方法   趣解

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!