当前位置:首页>php>PHP设计模式(一)工厂模式

PHP设计模式(一)工厂模式

  • 2026-09-10 11:47:07
PHP设计模式(一)工厂模式

PHP设计模式一

多态

父类A,被子类B\C继承,D类中传入子类的父类,调用该类的统一方法。

class ABase{  protected $name ="ABase";  public functiontest(){echo"test ".$this->name." \n";  }}class B extends ABase{  public function__construct(){$this->name="B";  }}class C extends ABase{  public function__construct(){$this->name="C";  }}class D{  public functiontest(ABase a){    a->test();  }}$d = new D();$d->test(new B());$d->test(new C());输出test Btest C

php 是弱语言, 传入的数据类型不受限制,不包括严格校验模式。

比如D::test()参数不是ABase类也不会报错,但若是传入的类不符合a->test(),没有对应方法或需传入参数,程序会报错。

说明多态情况,意在表明弱语言和强语言的不同。

弱语言不适用所有设计模式。

1 工厂模式

简单工厂

interfacedb{  publilc functionconn(){}}classMysqlDbimplementsdb{  publilc functionconn(){return$this;  }}classPostgreSqlDbimplementsdb{  publilc functionconn(){return$this;  }}classFactory{publicfunctiongetConn($dbname){switch($dbname){case"mysql":returnnew MysqlDb()->conn();case"postgresql":returnnew PostgreSqlDb()->conn();default:new \Exception("db name error");    }  }}

使用

$factory = new Factory();$mysql = $factory->getConn("mysql");

核心思想,封装底层方法,使底层逻辑和业务逻辑分离。

客户端/逻辑层通过调用少量代码实现需求。

面向对象开闭原则:对于修改封闭,对于扩展开放。

优化工厂

以上方法并不符合面向对象开闭原则,可以再改进优化。

interfacedb{  publilc functionconn(){}}interfaceFactory{ publilc functiongetConn(){}}classMysqlDbimplementsdb{  publilc functionconn(){return$this;  }}classPostgreSqlDbimplementsdb{  publilc functionconn(){return$this;  }}classMysqlFactoryimplements{publicfunctiongetConn(){returnnew MysqlDb();  }}classPostgreSqlFactoryimplements{publicfunctiongetConn(){returnnew PostgreSqlDb();  }}

使用

$factory = new PostgreSqlFactory();$conn = $factory->getConn();

总结

后者相比于前者相同点:底层逻辑修改封闭,即修改封闭。

后者相比于前者优点:调用不同工厂类可新建类,而不用修改已有代码,即扩展开放。

手写代码可能有误,勿复制后直接运行。

B站视频

【PHP架构师学习内容之设计模式】https://www.bilibili.com/video/BV1P441127kP?p=5&vd_source=f1bd3b5218c30adf0a002c8c937e0a27

扫描识别二维码关注我们获取更多

最新文章

随机文章