前言: 工厂模式是设计模式中较为常用的一种设计模式,对于程序员来说想提高自己必学的设计模式。
工厂模式概念
工厂模式作用:实现了创建者和调离者的分离。
主要分为:
- 简单工厂模式(静态工厂模式)
- 工厂方法模式
- 抽象工厂模式
该模式主要体现的设计OOP七大原则中:
- 开闭原则:一个软件的实体应当对外扩展开放,对修改关闭
- 依赖原则:要针对接口编程,不要针对实现编程
- 迪米特原则:只与你直接朋友通信,而避免和陌生人通信
核心本质:
- 实例化不使用new,用工厂方法代替
- 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦
简单工厂模式
举例:对于每个车类来说当需要调用时,普通来讲是创建对应的类的对象,没有将实现类与调用者分离,而简单工厂模式,则是将创建一个类,将面对不同情况然后返回不同的类,再调用时,则实现了实现类与调用者分离。缺点:当需要添加新的类时,则需要修改原代码,没有体现开闭原则。
工厂方法模式
举例:工厂方法模式则是将每个实现类创建对应的工厂,从而实现实现类与调用者的分离,同时也遵守了开闭原则。但当实现类过多时,则对应的工厂会很多,代码量则很大。
抽象工厂模式
模式的结构
抽象工厂模式的主要角色如下。
-
抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
-
具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
-
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
-
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。
举例:简单工厂模式和工厂方法模式是对于产品而言来进行建立对应的工厂,只能对应于同等级下的产品,而抽象模式是对应于一种产业链来看的,如对应不同产品来说,都有不同品牌,但对应也有不同的功能和具有该品牌特有的特点,抽象工厂模式则是提供抽象工厂和抽象方法,通过继承抽象工厂去创建品牌工厂,然后对于不同产品(实现类)调用不同方法(重写抽象方法)实现创建对应的产品(实现类对象),而该品牌(抽象工厂)的产品(实现类)则需要去实现对应的产品接口。
如图(抽象工厂模式的结构图):