定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式的UML通用类图如下所示:
应用实例
数据库从MySQL切换到Oracle,需要改动的地方就是切换一下驱动名称(前提条件是SQL语句是标准语句),其他的都不需要修改
下面给出工厂方法模式的demo
优点
一个调用者想创建一个对象,只要知道其名称就可以了
使用场景
工厂方法模式是典型的解耦框架,是new一个对象的替代品。例如设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。实现三个具体的产品类连接方式,再定义一个工厂方法,按照不同的传入条件,选择不同的连接方式。
工厂方法模式的扩展
1 、缩小为简单工厂模式
SimpleFactory 类仅有两个地方发生变化:去掉继承抽象类,并在createProduct前增加static关键字。该模式是工厂方法模式的弱化,因为简单,所以称为简单工厂模式(Simple Factory Pattern),也叫做静态工厂模式。在实际项目中,采用该方法的案例还是比较多的。
2 、升级为多个工厂类
每一个产品类都对应了一个创建类。但是给可扩展性和可维护性带来了一定的影响。在复杂的应用中一般采用多工厂的方法。然后再增加一个协调类。协调类的作用是封装子工厂类,对高层模块提供统一的访问接口。
3 、替换单例模式
UML类图:
4 、延迟初始化
一个对象被消费完毕后,并不立刻释放。
4.1、场景
例如JDBC连接数据库,都会要求设置一个MaxConnections最大连接数量,该数量就是内存中最大实例化的数量。
工厂方法模式还可以与其他模式混合使用(例如模板方法模式、单例模式、原型模式等)
领取专属 10元无门槛券
私享最新 技术干货