当前位置: 首页 > 后端技术 > PHP

PHP设计模式(三)抽象工厂模式(AbstractFactory)

时间:2023-03-29 17:07:00 PHP

1.什么是抽象工厂模式?抽象工厂模式还必须满足以下条件:系统中存在多个产品族,系统一次只能消费其中一个产品族。可以使用属于同一产品系列的产品。产品系列:功能相关的产品系列,位于不同的产品层次结构中。在下面的示例中,汽车和空调是两个产品树。奔驰C200+某款格力空调是一个产品家族。同样,奥迪A4+某款海尔空调也是一个产品家族。2.类图3.案例产品类//Car(抽象产品接口)接口AutoProduct{publicfunctiondirve();}//奥迪A4(具体产品类)classAudiA4ProductimplementsAutoProduct{//获取车名publicfunctiondirve(){echo"驾驶奥迪A4"."
";}}//BenzC200(具体产品类别)classBenzC200ProductimplementsAutoProduct{//获取车名publicfunctiondirve(){echo"DriveMercedesC200"."
";}}//空调(抽象产品接口)接口AirCondition{publicfunctionblow();}//某款格力空调(具体产品类别)classGreeAirCondition实现AirCondition{publicfunctionblow(){echo"BlowA格力空调某型号"."
";}}//某型号海尔空调(具体产品类别)classHaierAirConditionimplementsAirCondition{publicfunctionblow(){echo"吹某型号海尔空调"."
";}}工厂类//工厂接口interfaceFactory{publicfunctiongetAuto();publicfunctiongetAirCondition();}//FactoryA=AudiA4+Haier空调型号classAFactoryimplementsFactory{//CarpublicfunctiongetAuto(){returnnewAudiA4Product();}//空调公共函数getAirCondition(){返回新的HaierAirCondition();}}//FactoryB=BenzC200+格力某型号空调BFactoryimplementsFactory{//automobilepublicfunctiongetAuto(){returnnewBenzC200Product();}//空调publicfunctiongetAirCondition(){returnnewGreeAirCondition();}}客户端类//客户端测试代码$factoryA=newAFactory();$factoryB=newBFactory();//工厂造车$auto_carA=$factoryA->getAuto();$auto_airA=$factoryA->getAirCondition();//B厂造车$auto_carB=$factoryB->getAuto();$auto_airB=$factoryB->getAirCondition();//开奥迪车+吹海尔空调$auto_carA->dirve();$auto_airA->吹();//天热可以吹空调//开奔驰+吹格力空调;$auto_carB->dirve();$auto_airB->blow();//热了可以吹空调4.抽象工厂模型的组成抽象工厂(AbstractFactory):确定工厂的业务范围具体工厂(ConcreteFactory):每个具体的工厂对应一个产品族。特定的工厂决定生产哪个特定的产品对象。抽象产品(AbstractProduct):同一产品层次结构的抽象类。具体产品(ConcreteProduct):可供生产的具体产品。工厂方法模式:一个抽象的产品类可以派生出多个具体的产品类。一个抽象工厂类可以派生出多个具体工厂类。每个具体工厂类只能创建具体产品类的一个实例。抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类可以派生出多个具体工厂类。每个具体工厂类都可以创建具体产品类的多个实例。三个工厂中较简单的工厂:用于生产同一层次结构中的任何产品。(对于添加新产品,什么也做不了)工厂方法:用于生产相同层次结构的固定产品。(支持添加任意产品)抽象工厂:用于生产不同产品族的所有产品。(对于添加新产品,我们无能为力;支持添加产品系列)参考系列源地址WilburXu/design_pattern系列目录PH??P设计模式概述PHP设计模式(一)简单工厂模式(SimpleFactoryForPHP)PHP设计模式(2)工厂方法模式(FactoryMethod)PHP设计模式(3)抽象工厂模式(AbstractFactory)PHP设计模式(4)单例模式(Singleton)