“工厂二字让小编联想到化肥厂、汽车厂、钢铁厂。工厂即:制造产品的地方,而我们程序中的产品就是对象。生活中的工厂有一个共同之处,就是为我们提供加工好的成品 ,但是至于产品是如何加工的,经历了哪些过程,我们不得而知。如果在编程中,我们借助生活工厂的思想将程序具体实现细节进行隐藏,根据用户的具体需求动态提供准确的服务(动态创建对象),会不会给用户更好的体验的呢?”

问题引入:小王失业了,在亲友的帮助下他开了家理发店,理发店的店员会理各种发型,比如:平头,中分,偏分,左偏分,右偏分,甚至烫发,染发等等。对于这个问题,我们该如何将工厂模式应用其中的。
问题分析:每位顾客都是一个对象,我们就得创建一个特定的对象,为其提供不同的发型。发型类如下图:
测试类Test1:

小王:不对呀,要是来1000个顾客,我岂不是要new1000次,而发型的种类可能也没有1000种,这种代码复用率为零的程序我不要。
小编:小王有前途,很入行嘛,我发誓你一定会成为理发行业的大哥大。
工厂模式的引入:有一个生产发型的工厂,当客户告诉小王需要什么发型时,工厂就动态的创建出对应的对象。粗略图如下:

代码实现:
创建发型接口:

发型实现类:

发型工厂:

测试类:

以上就是简单工厂模式。
原本以为小王理发店的故事就这样结束了,但是当小王看到HairFactory中大量的if else判断后,他又心生不满。小王说,要是来10000种发型,我是不是得写10000次if else判断。小编:我我我。。。改。
引入type.properties文件如下:给发型接口具体的实现类的路径起别名。

编写工具类:ProPertiesReader将type.properties中的所有内容转换成key,value存入map集合中。

修改工厂类:利用反射创建用户所需的对象。

后记:开头说了理发店可以提供理发、烫发、染发服务,将这三种不同的服务进行细化又会发现什么呢。希望能帮助到大家。





