设计模式 - 抽象工厂模式

it2022-05-09  36

简介

产品等级结构和产品族

产品等级结构 :产品的继承结构。对于电视机,有海尔、海信、TCL 等品牌,抽象电视机与具体品牌的电视机之间构成了一个产品等级结构。产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔工厂生产的电视机、电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。

工厂方法模式中,一个具体工厂只生产一种产品。当工厂所生产的具体产品位于多个不同的产品等级结构中时,需要使用抽象工厂模式。

在所有的工厂模式中,抽象工厂模式最为抽象,最具一般性。

模式定义

提供一个接口,用于创建一系列相关或相互依赖对象,而无须指定它们具体的类。

模式特点

抽象工厂模式包含四个角色:

Product:抽象产品ConcreteProduct:具体产品Factory:抽象工厂ConcreteFactory:具体工厂

优缺点

增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。添加新产品时,需要修改抽象工厂及所有的工厂来添加这个产品(开闭原则的倾斜性,增加新的工厂和产品族容易,增加新的产品等级结构麻烦)。

PHP 代码示例

<?php abstract class AbstractFactory { abstract function makeTV(); abstract function makeCamera(); } class TCLFactory { function makeTV() { return new TCLTV(); } function makeCamera() { return new TCLCamera(); } } class HaiXinFactory { function makeTV() { return new HaiXinTV(); } function makeCamera() { return new HaiXinCamera(); } } abstract class AbstractTV { abstract function f1(); } class TCLTV extends AbstractTV { function f1() { echo "This is TCL TV"; } } class HaiXinTV extends AbstractTV { function f1() { echo "This is HaiXin TV"; } } abstract class AbstractCamera { abstract function f1(); } class TCLCamera extends AbstractCamera { function f1() { echo "This is TCL Camera"; } } class HaiXinCamera extends AbstractCamera { function f1() { echo "This is HaiXin Camera"; } } $TCLFactory = new TCLFactory(); $TCLTV = $TCLFactory->makeTV(); $TCLCamera = $TCLFactory->makeCamera(); $TCLTV->f1(); $TCLCamera->f1();

转载于:https://www.cnblogs.com/kika/p/10851575.html


最新回复(0)