您的位置:首页 > 其它

工厂模式的一点想法

2015-12-02 22:50 260 查看
最近,一直在学习设计模式方面的知识,可能经历单例模式之后就是工厂模式,那么工厂模式到底有哪些优越性呢,围绕着静态工厂,工厂方法,抽象工厂展开的书籍枚不胜数,那么什么是工厂呢?为什么要使用工厂呢?

工厂--简单理解就是一个容器,需要什么就去取什么的容器,这是最基本最浅显的一种理解,在工厂里面还可以做哪些事情呢,这不得不提到一个概念工厂的工厂,就是制作工厂的一个容器,这个容器可不可以理解是一个顶级容器呢,所有的资源都是依赖于这个容器的,当跳出这个容器,看到这个顶级容器的时候,基本就知道这个工厂模式是什么意思了。在具体的工厂容器中,负责具体模块的功能,在顶级容器负责将各个容器的资源进行整合,如果我们在设计一个架构的时候,往往需要先构思这个顶级容器需要做哪些事情,就是提供哪些接口,具体的拓展就是在这个顶级容器中完成的,这个时候也就不要谈什么设计原则了,只能在这个顶级容器里面扩展了,就好比没有了杯子,怎么去用杯子装水呢。顶级容器负责制定一系列规则,将职能细分,然后由具体的职能容器负责职能实现。

为了表述的更加完成,还是对工厂模式做一个细分

1、简单工厂模式

简单工厂又称为静态工厂,因为负责具体实例的创建,所以为了避免工厂实例化,一般将工厂设计为静态工厂,也将构造器设置为私有构造器,如果需要工厂创建实例,只需要在这个工厂中添加对应的处理方法即可,但是这种模式违背了OCP原则(OPEN-CLOSED-PRINCIPLE)。

2、工厂方法模式

在简单工厂的基础上做一个一次抽象,即创建一个工厂接口,具体的实例分别由具体的工厂创建,这样创建实例的时候只需要调用具体工厂的方法即可,但是这样也存在一个问题,需要实例化工厂,同时,也给程序的结构增加了复杂度,但是该模式符合OCP原则。

3、抽象工厂模式

抽象工厂模式是简单工厂模式和工厂方法模式的一种妥协吧,对创建的实例进行分组,同组实例由一个工厂进行管理,这种方式类似于简单工厂,不同组之间通过一个工厂管理,这种方式类似于工厂方法,为什么笔者会有此联想呢,抽象工厂所解决的问题就是一种多维度的问题,应对多维度,避免应对每一种情况创建一个工厂而导致系统结构的复杂性,但为了保证按照组进行系统扩展。因此对于组类的扩展是违背了OCP原则,但是对于组外扩展是符合OCP原则的。

以上,是笔者对于工厂模式的一种理解,还请路过人提出一些宝贵的建议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: