一、背景介绍
工厂模式是设计模式的一种,旨在提高开发效率。《Effective Java》总结了 23 种设计模式,涵盖名称 - 问题 - 解决方案 - 实用效果等要素。核心设计思路包括'针对接口编程而不是针对实现编程'、'优先使用组合而不是继承'。当前讨论的设计模式主要针对面向对象编程。
二、知识剖析
1. 工厂模式
工厂是为了实现对构造过程的封装。作为一种创建型设计模式,其主要思想是替代 new 关键字创建对象。工厂选择创建对象的方法,对构造过程进行逻辑封装,从而带来更大的可扩展性和低耦合。
2. 工厂模式分类
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
3. 简单(静态)工厂模式
简单工厂模式是最初自然形成的设计思想,又称为静态工厂模式。它直接根据条件决定创建的产品,将创建过程自然封装。
4. 简单工厂模式组成
- 工厂角色:创建具体产品,实现了对创建过程的封装。
- 抽象产品角色:工厂类所创建产品的父类或共同接口。
- 具体产品角色:工厂类所创建对象的实例。
工厂模式和抽象工厂多了一个共同的工厂接口,所有实例工厂都是该接口的实现类。
5. 简单工厂模式的优缺点
优点:
- 封装了创建对象的过程,可以通过参数直接获取对象。
- 将对象的创建和业务逻辑层分开,避免修改客户代码。
- 实现新产品时只需修改工厂类,降低了与客户代码修改的关联,更容易扩展。
缺点:
- 工厂类的职责比较大。
- 添加新产品时需修改工厂类。
- 如果工厂类出现问题,所有客户端都会受影响。
- 注:工厂模式通过遵循开闭原则,在添加新工厂类实现抽象接口时可完美解决上述部分问题。
6. 面向过程简述
面向过程关心的是事件和步骤的顺序执行。例如:起床 - 穿衣洗漱 - 吃饭 - 上班。 面向对象则抽象出类和方法,灵活性更强,可以直接实现方法而不必在意前后步骤顺序。
三、常见问题
1. 设计模式使用原则
- 设计模式只是思路,不能解决所有问题。
- 不要强制使用,它是用来解决问题,而不是寻找问题。
- 一定要在对的地方使用,不然只会适得其反。
2. 设计模式三大类
- 创建型模式:专注于如何初始化对象,隐藏创建逻辑。如工厂、单例、建造者、原型模式。
- 结构型模式:针对类和对象的组合,获得更大/更好的结构。如桥接、适配器、装饰、委托、享元、组合模式。
- 行为型模式:关心对象之间的责任分配和消息传递。如命令、观察者、访问者、迭代器、中介者、策略模式。
3. 设计原则
- 开闭原则:对扩展开放,对修改关闭。只通过扩展修改,不更改原有代码。
- LoD(迪米特)法则:一个对象尽可能少了解其他对象,只关心自己,减少依赖。
- 依赖倒置(DIP)原则:高层不应依赖低层模块,两者都应依赖抽象;细节依赖抽象。
- 单一职责:一个类只有一个职责,负责份内的事。
- 里氏替换原则:子类可以扩展父类,但不能改变父类原有的方法。
- 接口隔离原则:客户端不应该依赖它不需要的接口,依赖应建立在最小接口上。
- 合成复用原则:尽量首先使用组合的方式,而不是使用继承。

