工厂模式和抽象工厂模式的描述(总结设计模式中的三种工厂模式有那些不同)

设计模式的三种工厂模式是什么?

设计模式是前辈们用经验总结的可复用的,能够解决一系列特定问题的一种编程设计思路,并不是语法规定,而是一种解决方案。

由GOF四人组收录了23种设计模式,其中创建型最常见的就是工厂模式(主要是用来管理和创建实例),实际应该只有工厂和抽象工厂两种模式,但是还有一个针对工厂的简化版本简单工厂模式,虽然违反了开闭原则(即对扩展开放,对修改关闭的设计原则),但是在特定状况下,简单工厂也有其优势的地方。

设计模式的三种工厂模式分别是:

简单工厂模式:

角色:工厂角色,抽象产品角色,具体产品角色。

创建型,特点是由一个工厂决定了产品类的实例。

工厂模式:

角色:抽象工厂角色,抽象产品角色,具体产品角色。

创建型,特点是尽管每个产品都要有一个相应的工厂类,但是不会对整体代码结构进行修改。

抽象工厂模式:

角色:抽象工厂角色,抽象产品角色,具体产品角色。

创建型,特点将共同部分封装在抽象类中,不同部分则由子类实现,同样不会对整体结构进行修改。

简单工厂模式

上面那一大串说实话有点不说人话,本质上这三种模式都是为了解决创建实例的问题,因为创建实例是在是太麻烦了。

假设我有很多的类,但是在这个场景下我只需要其中几个,而且还是根据需求的不同随时变化,那么我就需要一个能够随时给我相应需求类的实例的一个方法。

那么简单工厂就诞生了。

工厂模式和抽象工厂模式的描述(总结设计模式中的三种工厂模式有那些不同)(1)

其简单的构造确解决了很多问题,我能随心所欲的创建自己想要的实例,并且我不用去担心实例的创建过程,我只需要传入参数,就能获得对象并使用其方法。

工厂模式和抽象工厂模式的描述(总结设计模式中的三种工厂模式有那些不同)(2)

但需要注意的是,如果需要新增苹果手机制造,那么就要修个工厂类,如果频繁的修改业务对于整个系统的维护将是一场灾难。

那么有没有解决的方法呢?

工厂模式

那必然就是工厂模式了,相较于简单工厂来说,工厂模式将产品和工厂一一对应,而把所有的工厂相同部分抽象的集合到一个超级工厂接口中去,那么所有工厂都是这个超级工厂的子类,需要实现工厂模式的规范。

工厂模式和抽象工厂模式的描述(总结设计模式中的三种工厂模式有那些不同)(3)

这下来说虽然需要对调用者(客户端)有一定的调整,但是对于整体的结构来说,不管新增多少个产品,都不影响结构,比如要新增一个苹果手机,那么只需要同时新增苹果工厂(实现create)和苹果手机即可。

工厂模式和抽象工厂模式的描述(总结设计模式中的三种工厂模式有那些不同)(4)

这比简单工厂模式有了一定的长进,但是如果此时不仅仅要生产手机了,还有平板,那该怎么办?

诶,有办法!

抽象工厂模式

工厂模式和抽象工厂模式的描述(总结设计模式中的三种工厂模式有那些不同)(5)

抽象工厂模式则是将相同的部分抽象封装了,就像手机和平板不同的业务线给封装了,但是还是同属于一个品牌之下,那么就相当于品牌下有两个分支手机和平板。

工厂模式和抽象工厂模式的描述(总结设计模式中的三种工厂模式有那些不同)(6)


,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页