1.3 creational 创建型 - abstract factory 抽象工厂模式

Abstract Factory 抽象工厂模式 及几种工厂模式的对比

[TOC]

创建型设计模式
又名 Kit Factory

简介

  • 抽象工厂的比较难以理解,需要引入两个产品分类型的定义。产品族、产品类,一般先分族,再分类。

产品族

如宝马车,奔驰车
如Mysql族,mongodb族
如中国人,美国人

产品类

如suv类,轿车类
如user类,department类
如好人,坏人

  • 抽象工厂模式是工厂方法模式的进化,当Concrete Product是不同产品族内产品的时候。Abstract Product 由Factory Method 的一个变成多个。
  • 一个ConcreteFactory生产不同种类的Product,每一类Concrete Product拥有共同的Abstract Product。

四种角色:Factory、Concrete Factory 、Product、Concrete Product

角色 个数
Factory:抽象工厂 一个
Concrete Factory 具体工厂 多个
Product: 抽象产品 多个
Concrete Product:具体产品 多个

类图

1.3 creational 创建型 - abstract factory 抽象工厂模式_第1张图片
AbstractFactory.png

优点

* 增加新的产品族很方便,无需修改已有系统,这种情况符合开闭原则。
* 抽象类的使用替代了具体类,符合依赖倒转原则。

缺点

* 开闭原则的破坏(增加新的工厂和产品族容易,增加新的产品等级结构的情况下破坏了开闭原则)

应用 生产奔驰宝马的suv和轿车 不同数据库的使用

  • 生产奔驰宝马的suv和轿车
    • Product 多个,一族产品的集合抽象定义(如宝马车族,奔驰车族)
    • Concrete Product 宝马suv,奔驰suv,宝马car,奔驰car.
    • Factory 定义了具体工厂(SUV Factory,Car Factory)的抽象接口。
    • Concrete Factory 是生产一类产品的工厂,如 SUV Factory,Car Factory.
  • 《大话设计模式》 中举例:不同数据库的使用
    • Product 多个,一族产品的集合抽象定义(如宝马车族,奔驰车族)
    • Concrete Product MysqlUser,MysqlDepartment,MongodbUser,MongodbDepartment.
    • Factory 定义了具体工厂(User Factory,Department Factory)的抽象接口
    • Concrete Factory 是生产一类产品的工厂,如 User Factory,Department Factory.
  • 自己项目举例:
    //todo

你可能感兴趣的:(1.3 creational 创建型 - abstract factory 抽象工厂模式)