在我们刚开始学习设计模式的的时候,一个比较让人头疼的问题在于,我们没有办法理解为什么要用,其实原因很简单,我们学习的时候,看到的需求和代码是固定的,他们没有告诉你如果代码要变动,会怎么变,而设计模式是面向变化的,因此我希望用一篇文章,去回顾每一个设计模式,同时指出来,它应对的是什么样的变化,希望能够帮助大家理解设计模式本身。
一. 简单工厂模式
- 一句话描述:简单工厂模式,就是通过封装对象的创建过程(包括什么对象被创建和怎么被创建),使得使用者不需要关心对象的构建,只需要专注于消费对象
- 使用场景:
1.构建过程复杂且多变的对象,用工厂模式来封装构建细节
2.希望对构建过程有更强的掌控力的情景(比方说插入逻辑或者改用对象池等)
3.构建的对象类型是可变的,就好像是水果下面可以增加新的种类等 - 应对的变化:构建过程的变化,构建对象的变化
- 缺陷:每次新增产品的时候,工厂类一定要修改相应的代码,没有完全符合”开闭“原则
二.工厂模式
- 一句话描述:工厂模式是将工厂抽象化,从而允许通过实现抽象工厂接口来赋予新的对象构建能力的模式
- 使用场景:
1.产品具有层级概念,产品的种类繁杂,不同层级的产品构建细节不同
2.产品是易变 - 应对的变化:构建过程的变化,构建对象的变化
抽象工厂模式
- 一句话描述:抽象工厂模式中,允许工厂生产多种抽象产品(而工厂模式中只允许一种),称之为产品族
- 使用场景:
1.对于所有的使用场景,都有两种及以上的实现方法,且方法之间是互相绑定的(比方说特定数据库,有增删改查四种产品) - 应对的变化:特定种类的产品的变化
总结工厂三兄弟
工厂三兄弟的核心目标是封装创建过程,他们之间的差异在于面向创建对象的差异,其中工厂模式是为了解决简单工厂中的开闭问题,而抽象工厂模式是为了解决面对的不是单一产品,而是多类别产品的问题