基本的多态的使用
简单工厂
随便一个东西,简单create方法就是简单工厂
单例可以看做是简单的工厂
可扩展性不好。每次添加都要新的方法
工厂方法模式
Factory 接口:工厂方法模式的核心接口之一。使用方会依赖 Factory 接口创建 Product 对象实例。
Factory 实现类( FactoryImpl 1 和 FactoryImpl 2):用于创建 Product 对象。不同的 Factory 实现会根据需求创建不同的 Product 实现类。
Product 接口:用于定义业务类的核心功能。Factory 接口创建出来的所有对象都需要实现 Product 接口。使用方依赖 Product 接口编写其他业务实现,所以使用方关心的是 Product 接口这个抽象,而不是其中的具体实现逻辑。
Product 实现类( ProductImpl 1 和 ProductImpl 2):实现了 Product 接口中定义的方法,完成了具体的业务逻辑。
灵活的方式指定不同的 族系
基于多态
- 抽象工厂:(电脑公司)定义抽象方法。方法返回值是抽象产品
- 存在意义:调用者可以有统一的调用接口规范
- 具体工厂:(苹果,惠普公司)继承抽象工厂,实现抽象方法,方法的返回值是抽象产品
- 存在意义:按照抽象产品的规范,面向抽象工厂的接口,生产有自己的特色的产品
- 抽象产品(电脑)
- 存在意义:编写抽象工厂的时候使用
- 具体产品:(MAC,XPS)
- 每个具体工厂自己要实现的东西
最后使用工厂:抽象工厂接收,调用某一个具体工厂,每一个具体工厂都实现了抽象工厂的相同方法,只是返回的是抽象产品的不同实现类
就像是抽象工厂定义了一个电脑工厂应该生产电脑,固定了生产零件,组装电脑的抽象方法。具体工厂就像惠普公司,苹果公司,他们都会生产零件,组装电脑,但是品牌不一样。使用者根据自己的需要选择具体的工厂,使用抽象工厂已经定义的接口方法就可以获取自己想要的产品,不需要关注具体工厂的实现。
工厂与抽象工厂的对比
- 工厂方法:(增加工厂容易,适合只有一个类别的时候,小部门,自己只负责鼠标生产。一个鼠标类别下要管理自己很多公司的时候要采用这个方式)
- 只会产生一类产品,下面是不同的工厂
- 增加工厂的时候实现生产产品的方法以及自己的产品的子类即可
- 抽象工厂:(增加类别困难,适合大工厂,自己管理很多类别,负责生产鼠标键盘主机,一个电商要管理展示很多电脑企业的时候可以采用这个方式)
- 会产生多类产品,下面是不同的工厂
- 增加类别的时候每一个工厂都需要实现生产这个类别的方法以及类别对应具体的实现类
- 增加工厂的时候,要把所有类别的产品都实现自己的实现类
应用
软件换皮肤。调用的方法是一样的,下面的实现方法名字都一样,但是内部的具体实现是不同的。所以开发者只需要面向写好的接口开发,而不是自己实现一个新的皮肤的时候就随便定义方法名字。