设计模式学习之工厂模式
在刚开始做开发工作的时候接触过这种设计模式,但很懵懂,很多地方不明白,只是照搬了这样的写法,现在回过头来好好学习一下工厂模式。
工厂模式主要能解决什么问题以及在什么时候使用?
主要解决接口选择的问题,我们需要在不同条件下创建不同的实例来实现不同的功能。
怎么实现其关键代码在哪里实现呢?
应该是在其子类实现工厂接口并返回一个抽象的产品,并在创建过程在其子类执行。举一个具体的例子,比如说要做一批家具,我们可以直接从工厂里直接提货,不用管管家具是怎么做出来的,具体实现我们不用关心,所有的工作都有工厂子类实现。
工厂模式的优点和缺点总结
- 优点就是扩展性高,如果想要增加一类产品可以新创建一个工厂类就可以实现。屏蔽了产品的具体实现,调用者只关心产品的接口。
- 缺点就是每次增加一个产品就要增加一个工厂类实现,是系统中的类个数成倍增长,增加了系统的复杂度,同时增加了系统具体类的依赖。
使用场景举例
比如说日志记录,有可能有多种操作,有的需要记录到硬盘,有的需要记录到系统事件,有的则需要记录到服务器,这些用户都可以选择,所有我们需要用不同的工厂实现类来实现不同的操作,然后由工厂来区分用户的选择从而实现具体的日志操作方式。
注意只要使用工厂的地方肯定都要引入一个工厂类,会增加系统的复杂度