前言:本人最近由于项目任务提前完成,以前对java的设计模式没有太多的了解,在面试的时候,也只能寥寥的举出几种,面试之后本人决定对java的设计模式做一个深入的了解,以及在学到的东西在适当的位置结合自己的项目,并且运用到项目中。通过这段时间对java设计模式的了解,发现自己以前完全是对设计模式的误解。所以把自己学到的和理解的和大家一起分享,所有文章仅代表自己的个人观点,希望能和大家一起学习交流,好了话不多说,进入正题。
工厂模式:网络中都没有找到准确的定义。
自己个人理解:就是针对接口编程。将所有同类的东西进行高度抽象成一个接口,通过父类引用指向子类对象的方式,然后在不改变原有子类的情况下,进行拓展。
工厂模式:
1、工厂方法模式
首先所有的工厂方法模式都离不开一个高度抽象的接口。
a、 简单工厂模式:
a.1、通过实现接口的方式,衍生出不同的实体子类
a.2、然后给通过一个工厂类来管理我们的实体子类
a.3、然后在需要工厂的地方调用:
到此简单的工厂模式就已经完成,当我们需要创建第三个子类时,我们需要去实现接口,然后在实际的工厂管理类中,加多一个判断,就是提高代码的拓展性。
举个例子:银行刷卡系统如果一家公司先有一个人去开发了关于建行和农行的刷卡功能,后来因为个人原因要离职,新来的小伙伴,接手业务的时候,以前的哥们告诉他,以前的那个代码你不用管,你只要去实现我们的某个接口,然后新的银行逻辑(比如中行)你在自己实现的类中去写的代码逻辑,然后在工厂加多自己的判断,就完全ok,那么新来的小伙伴只需要知道接口,和工厂类就可以了。以前的代码逻辑暂时可以不用管(有时间自己再去研究),是不是很便于功能的拓展。
b、多工厂模式:相同的代码我就不贴出来了,只看我们不同的部分。
b.1、还是给通过一个工厂类来管理我们的实体子类
仔细看:其实就是通过父类引用指向子类对象的方式,返回对应子类的对象,、
b.2、然后在需要工厂的地方调用:
个人觉得这以上两种方式没有太大区别。
c、静态工厂模式:相同的代码同样不贴出来了,只看我们不同的部分。
c.1、同样通过一个工厂类来管理我们的实体子类
c.2、调用方式:
好了这里是工厂方式模式的三种模式的应用,
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我会选用第三种——静态工厂方法模式。
有时间的童鞋:希望你们去巩固一下静态和非静态的区别。
说一说工厂方法模式的缺点:工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,由于时间的原因,只能在下一篇博客中去写关于抽象工厂模式的理解。希望感兴趣的童鞋持续关注我文章,谢谢大家。不喜勿喷。