首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式的UML通用类图如下所示:

应用实例

数据库从MySQL切换到Oracle,需要改动的地方就是切换一下驱动名称(前提条件是SQL语句是标准语句),其他的都不需要修改

下面给出工厂方法模式的demo

优点

一个调用者想创建一个对象,只要知道其名称就可以了

使用场景

工厂方法模式是典型的解耦框架,是new一个对象的替代品。例如设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。实现三个具体的产品类连接方式,再定义一个工厂方法,按照不同的传入条件,选择不同的连接方式。

工厂方法模式的扩展

1 、缩小为简单工厂模式

SimpleFactory 类仅有两个地方发生变化:去掉继承抽象类,并在createProduct前增加static关键字。该模式是工厂方法模式的弱化,因为简单,所以称为简单工厂模式(Simple Factory Pattern),也叫做静态工厂模式。在实际项目中,采用该方法的案例还是比较多的。

2 、升级为多个工厂类

每一个产品类都对应了一个创建类。但是给可扩展性和可维护性带来了一定的影响。在复杂的应用中一般采用多工厂的方法。然后再增加一个协调类。协调类的作用是封装子工厂类,对高层模块提供统一的访问接口。

3 、替换单例模式

UML类图:

4 、延迟初始化

一个对象被消费完毕后,并不立刻释放。

4.1、场景

例如JDBC连接数据库,都会要求设置一个MaxConnections最大连接数量,该数量就是内存中最大实例化的数量。

工厂方法模式还可以与其他模式混合使用(例如模板方法模式、单例模式、原型模式等)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190115G1FU0D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券