💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
> **设计模式-简单工厂模式** ## 说明 ## **工厂模式是创建型模式的一种,分为简单工厂模式,工厂模式,抽象工厂模式,简单工厂可以称之为工厂模式的一个特例** ---------- ##简单工厂## 简单工厂:将调用者和创建者分离,实现解耦,调用者直接向工厂请求,通过工厂去选择需要实例化的对象,用一个单独的类来做这个创建实例的过程。 ![请输入图片描述][1] <h5>服务端操作类</h5> <?php /** * Interface db 链接数据库接口 */ interface db{ function conn(); //连接方法 } //服务端接口 /** * Class dbMysql */ class dbMysql implements db { public function conn(){ echo "连接上了Mysql"; } } /** * Class dbSql */ class dbSql implements db{ public function conn(){ echo "连接上了sql"; } } <h5>工厂类</h5> /** * Class Factory */ class Factory{ public static function creatDB($type){ if($type == "mysql"){ return new dbMysql(); }elseif($type == 'sql'){ return new dbSql(); }else{ throw new Exception("没有该类型数据库"); } } } $objSql=Factory::creatDB('mysql'); $objSql->conn(); 通过工厂类来控制连接不同的数据库,如果要新增一个oracle连接,直接创建一个dbOracle来继承db类,然后在工厂类中进行创建就好。 ##工厂模式## 工厂模式:工厂模式是简单工厂的晋级版,在简单工厂模式下,如果需要新增一个类,需要更改工厂类代码,违反了封闭开放原则,而工厂模式则解决的这个问题。 ![https://blog.zxliu.cn/usr/uploads/2020/11/1966401635.png][2] <?php /** * Interface db 链接数据库接口 */ interface db{ function conn(); //连接方法 } //服务端接口 /** * Class dbMysql */ class dbMysql implements db { public function conn(){ echo "连接上了Mysql"; } } /** * Class dbSql */ class dbSql implements db{ public function conn(){ echo "连接上了sql"; } } interface Factory{ function creatDB(); } class MysqlFactory implements Factory { function creatDB() { // TODO: Implement creatDB() method. return new dbMysql(); } } class SqlFactory implements Factory{ /** * @return mixed */ function creatDB() { // TODO: Implement creatDB() method. return new dbSql(); } } $db=new MysqlFactory(); $objSql = $db->creatDB(); $objSql ->conn(); 如果要新增连接方式,直接新增新增连接方式,新增工厂创建类就好。 ## 结尾 ## <p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;"> 心如花木,向阳而生。 </p> [1]: https://blog.zxliu.cn/usr/uploads/2020/11/386091710.png [2]: https://blog.zxliu.cn/usr/uploads/2020/11/1966401635.png