工厂模式
工厂模式三大类 |
---|
1、简单工厂模式(静态工厂方法模式) |
2、工厂方法模式 |
3、抽象工厂模式(Kit模式) |
简单工厂模式
- 介绍
简单工厂模式是一种创建型设计模式,它提供了一个简单的工厂类来创建对象,而无需暴露对象的创建逻辑。简单工厂模式通常包含一个抽象工厂类、一个抽象产品类和多个具体产品类。
- 角色
角色 | 说明 |
---|---|
Factory | 抽象工厂类,负责创建具体产品的实例 |
Product | 抽象产品类,定义产品子类的公共接口 |
ConcreteProduct | 具体产品类,实现 Product 父类的接口功能,也可添加自定义的功能 |
- 角色示例
类名 | 担任角色 | 说明 |
---|---|---|
Poultry | 抽象工厂 | 抽象家禽类,定义家禽子类的公共接口 |
Cat | 具体产品 | 猫类,实现家禽类的接口功能,也可添加自定义的功能 |
Dog | 具体产品 | 狗类,实现家禽类的接口功能,也可添加自定义的功能 |
Duck | 具体产品 | 鸭类,实现家禽类的接口功能,也可添加自定义的功能 |
Pasture | 抽象产品 | 牧场类,负责饲养具体家禽的实例 |
- UML 类图
- 创建 Pasture.php,内容如下:
1 | <?php |
- 执行
1 | $ php Pasture.php |
工厂方法模式
- 介绍
工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪个类。换句话说,工厂方法模式允许子类决定实例化的类,而不是在父类中硬编码创建对象的逻辑。
- 角色
角色 | 说明 |
---|---|
Product | 抽象产品类,定义产品子类的公共接口 |
ConcreteProduct | 具体产品类,实现 Product 父类的接口功能,也可添加自定义的功能 |
Factory | 抽象工厂类,负责创建具体产品的实例 |
ConcreteFactory | 具体工厂类,实现 Factory 父类的接口功能,也可添加自定义的功能 |
- 角色示例
类名 | 担任角色 | 说明 |
---|---|---|
Livestock | 抽象产品 | 抽象家畜类,定义家畜子类的公共接口 |
Sheep | 具体产品 | 羊类,实现家畜类的接口功能,也可添加自定义的功能 |
Cow | 具体产品 | 牛类,实现家畜类的接口功能,也可添加自定义的功能 |
Pasture | 抽象工厂 | 抽象牧场类,定义牧场子类的公共接口 |
SheepPasture | 具体工厂 | 羊牧场类,实现牧场类的接口功能,也可添加自定义的功能 |
CowPasture | 具体工厂 | 牛牧场类,实现牧场类的接口功能,也可添加自定义的功能 |
- UML 类图
- 创建 Livestock.php,内容如下:
1 | <?php |
- 执行
1 | $ php Pasture.php |
抽象工厂模式
- 介绍
抽象工厂模式是一种创建型设计模式,它提供了一种接口,用于创建相关或依赖对象的家族,而不需要明确指定它们的具体类。它是工厂方法模式的扩展。
- 角色
| 角色 | 说明 |
| ———— | ———— | ———— |
|Factory|抽象工厂类,负责创建具体产品的实例|
|ConcreteFactory|具体工厂类,实现 Factory 父类的接口功能,也可添加自定义的功能|
|Product|抽象产品类,定义产品子类的公共接口|
|ConcreteProduct|具体产品类,实现 Product 父类的接口功能,也可添加自定义的功能|
- 角色示例
类名 | 担任角色 | 说明 |
---|---|---|
Pastoral | 抽象工厂 | 抽象牧区类,定义牧区子类的公共接口 |
XinJiangPastoral | 具体工厂 | 新疆牧区类,实现牧区类的接口功能,也可添加自定义的功能 |
QingHaIPastoral | 具体工厂 | 青海牧区类,实现牧区类的接口功能,也可添加自定义的功能 |
Sheep | 抽象产品 | 抽象羊类,定义羊子类的公共接口 |
Lambskin | 具体产品 | 羔皮羊类,实现羊类的接口功能,也可添加自定义的功能 |
TibetanSheep | 具体产品 | 藏羊类,实现羊类的接口功能,也可添加自定义的功能 |
Cow | 抽象产品 | 抽象牛类,定义牛子类的公共接口 |
Yak | 具体产品 | 耗牛类,实现牛类的接口功能,也可添加自定义的功能 |
Cattle | 具体产品 | 黄牛类,实现牛类的接口功能,也可添加自定义的功能 |
- UML 类图
- 创建 Pastoral.php,内容如下:
1 | <?php |
- 执行
1 | $ php Pastoral.php |