目录
前言
创建型设计模式:工厂方法、抽象工厂、建造者、原型、单例
工厂模式就占了两个,而单例模式和建造者模式也是经常使用的
工厂模式有三种简单工程模式、工厂方法模式、抽象工厂模式
简单工厂模式当生产的产品扩展后,还要修改生成对象的代码,违背了设计模式的原则
因此严格来说,简单工厂模式不算一种设计模式,但如果对象简单且少,也可以用这个
工厂方法模式是对简单工厂模式的一种改进,采用继承的方式把生产对象的操作下沉到子类
而抽象工厂模式是简单工程模式、工厂方法模式的结合,采用实现接口的方式,耦合性更低,扩展性更强
核心思想
工厂模式的核心思想就是把经常需要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);
说点什么
您将是第一位评论人!