Java开发工作久了,难免对一些Java中的技术想要探究一番。现在就Java经典的23种设计模式倒腾一番。
1、工厂方法模式:
在我们平时应用中其实工厂方法模式分为3种模式、
1-1:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:
代码:(借鉴一个邮件发送类和短信发送类)
首先创建一个共同的接口:
然后创建其实现类
最后建造工厂类
最后测试类:
测试结果:
输出:this is MaiSender
1-2 :多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,如果我们要多创建一个对象类型,就必须去修改工厂类的源码,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图
只需要改动我们的代码,改动下SendFactory类就行,如下:
测试类:
测试类结果输出:
this is MaiSender
=============================================
this is SmsSender
1-3 :静态工厂方法模式,想到这每次我们创建一个对象的时候都要先去创建一个工厂,然后再创建对象。为何不直接省去工厂实例,直接调用返回不同的对象。
修改SendFactory中的对象创建为静态方法
测试类的修改:
测试输出结果:
this is MaiSender
=============================================
this is SmsSender
总结:工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,还有就是如果新增一种对象创建,就会修改源码,这也违背了设计模式的六大原则之一(开闭原则-就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。),第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。后续在spring的源码中你也会发现大量的BeanFactory模式出现,为的就是加载生成不同的Bean对象。