您的位置:首页 > 编程语言 > Java开发

设计模式之工厂模式(个人理解)

2017-10-31 23:51 357 查看
作为一个初级Java程序员,今天学习了创建型模式中的工厂模式,有一些自己对工厂模式的理解,可能存在很多不足希望大家指出。

我相信大家都看了工厂模式的代码实现,代码感觉跟简单,就是定义一个含有方法的Factory接口,再创建一些实现类接口来实现这个Factory接口并且含有返回实现类的方法。举个例子:比如我现在想和饮料(Drink),现在我的脑海中有三个选择(橙汁(Juice),咖啡(Coffee),茶(Tea)).但是如果让我自己来做这些饮料有些困难,可能自己做法不对饮料就不好喝,这不是我想要的。没错,在我看来工厂模式的产生就可以解决的就类似于这个问题,为什么呢?因为我只是想喝饮料,完全没有必要去自己做,我不在乎这个饮料是如何产生的,我的目的只是得到这个饮料,所以我只需要一个可以直接为我提供饮料的商店,我告诉商店老板,给我来个橙汁或咖啡,他就可以直接给我满足我的想和饮料的需要。而对应到工厂模式中,我在写程序的时候可能需要用到一个很复杂的类,但是我并不需要自己去new这个类的对象,而是直接向这个类的工厂(Factory)要一个这个类的对象,避免了自己创建而可能产生的一些错误,因为通过通过工厂获得的类是“专业人士”已经写好的。

然后继续说我们饮料的问题,比如我们现在商店里面只生产这三种饮料(对应着代码中返回实体类对象的三个方法),商店里老板即会做橙汁,又会做咖啡,还会做茶,你想喝什么告诉我,我直接给你你想要的,老板的的想法是很完美的,但是问题来了如果有一天你突然想喝可乐(Cola)了怎么办,老板需要重新去学做一种新的饮料来满足你的需求,如果有一天你又想喝别的了怎么办?老板是不是还要重新去学其他的饮料的做法。这样是不是很麻烦?这就是对应了代码中的问题,工厂这个接口中如果直接用来返回实例类的对象,加入我的实体类每增加一种,接口就要重新改一次。在这里,我认为Java中面向添加,而不面向修改,意思是解决这种问题最好使用增加新代码的方式而不建议反复重新改源代码。为了解决这个问题,所以工厂模式中就是创建实体工厂类去实现Factory接口,还用饮料的问题来解释,现在老板不自己去做饮料了,他找了一个专门做橙汁的员工,找了一个专门咖啡的员工,找了一个专门做茶的员工,还有一个专门做可乐的员工。你想喝什么,就可以直接指定专门员工满足你的要求,如果你又想和别的饮料,老板只需要再找一个专门做那个饮料的员工就可以而不必自己费劲的去学。这就是对应了工厂模式中,有一个满足需求的接口(对应满足你想喝饮料需求的老板),还有专门为你需求产生指定对象的Factory(专门做某一种饮料的员工),实现了接口并可以为你返回你所需要的对象(他继承了老板要为你服务的特定生产饮料的指示,意思是生产可乐的员工只能为你生产可乐,如果你选了这个员工,你得到饮料就是可乐)。

所以现在总结一下工厂模式的优点,第一你不必去在乎产品的具体实现,你只需只关心产品的接口就行,第二想要获取一个对象,只需要知道对象的名称(饮料的名字)就可以,第三扩展性很高,如果增加新的产品,我只需拓展一个工厂类(相当于专门的员工)。当然并工厂模式也有缺点,并不是所有的new用工厂模式来替代都是优化的,就像一个简单的User类,直接new要比在创建一个工厂类在获取user要好的多,因为利用工厂模式在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

这是我自己对工厂模式的理解,提出来希望大家可以一起交流,共同进步,如果有错误,希望大家指出,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息