Welcome everyone

工厂模式小结

设计模式 汪明鑫 719浏览 0评论

前言

创建型设计模式:工厂方法、抽象工厂、建造者、原型、单例

工厂模式就占了两个,而单例模式和建造者模式也是经常使用的

工厂模式有三种简单工程模式、工厂方法模式、抽象工厂模式

简单工厂模式当生产的产品扩展后,还要修改生成对象的代码,违背了设计模式的原则

因此严格来说,简单工厂模式不算一种设计模式,但如果对象简单且少,也可以用这个

工厂方法模式是对简单工厂模式的一种改进,采用继承的方式把生产对象的操作下沉到子类

而抽象工厂模式是简单工程模式、工厂方法模式的结合,采用实现接口的方式,耦合性更低,扩展性更强

 

核心思想

工厂模式的核心思想就是把经常需要new的对象不在代码里以硬编码的形式出现,

那样的话,一处修改处处修改

耦合性太强,扩展性太差,

把对象生成的具体实现封装到一个工厂里,

而我们需要什么对象直接去工厂取,给工厂一个参数,工厂根据我们传的参数给我们返回具体的对象

我们不用直接依赖对象,依赖工厂即可,

在客户端直接持有工厂的实例,或者根据构造方法、方法传参等方式设置需要的工厂

 

工厂模式结合单例模式

简单工厂模式也称静态工厂模式

可以使用的静态方法生产类

同样也可以实现单例

 

延迟初始化

通过工厂生产的对象,可以用一个map缓存起来

可以降低对象的产生和销毁

 

下面这个捏泥人的例子:

通过 HashMap缓存对象

 

图解工厂模式

简单工厂模式

 

工厂方法模式

继承的方式

 

抽象工厂模式

接口的方式

 

 

两张图看懂抽象工厂模式:

 

首先是产品(需要生产的对象)

 

然后是生产产品的工厂

 

 

工厂模式在JDK中的使用

Integer.valueOf

返回Integer对象

我debug了一遍,里面的整体过程相当复杂,虽然只有简单的几行,但里面调用链好复杂

 

Calendar.getInstance()

创建对象的类 sun.util.locale.provider.CalendarProviderImpl

使用了建造者模式

 

也会根据传参返回具体对象

 

Collection中的iterator方法

 

 

 

JDBC

可以把关系型数据库认为是一种抽象产品,各厂商提供的具体关系型数据库(MySQL,PostgreSQL,Oracle)则是具体产品。

DriverManager是工厂类。应用程序通过JDBC接口使用关系型数据库时,并不需要关心具体使用的是哪种数据库,

而直接使用DriverManager的静态方法去得到该数据库的Connection。

Class.forName(nameStr);
conn = DriverManager.getConnection(url);

 

 

转载请注明:汪明鑫的个人博客 » 工厂模式小结

喜欢 (1)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz