工厂模式是指使用一个工厂类来创建其他对象的方法的类。通常用来返回符合类似接口的不同的类。工厂的一种常见用法就是创建多态的提供者,从而允许我们基于应用程序逻辑或者配置设置来决定应该实例化哪一个类。

在PHP应用程序中,通常会使用关系型数据库来储存应用程序创建和引用的数据。使用数据库的最大问题就是不能用一种可移植并且可互换的方法来它们打交道。加入我们把一种数据库移植到另一种的数据库上,那么可能需要重构大部分的代码。然而使用工厂模式就能避免这个问题的发生。

加入我们现在有两个数据库类

class PGSQL { function __construct() {} function connect() {} }

class MYSQL { function __construct() {} function connect() {} } </coolcode>

//我们现在创建一个工厂类 class Database { function static function load() { $type = loadConfig(); //从配置文件中找出数据库类型 switch ($type) { case 'PGSQL': return new PGSQL(); break; case 'MYSQL': return new MYSQL(); break; } } } // -- 用法 -- $db = Database::load(); $db->connect(); 通过工厂类Database, 通过不同的配置实例化不同的数据库类。 工厂模式的作用在于,可以根据输入参数或者应用程序的配置不同来创建一种专门用来实例化并返回其他类的实例的类。通过一个工厂方法返回一个对象

Nginx 自动禁止爬虫IP采集

### 背景最近我们有一个公开服务提供给客户查询关键词的热度值,由于这个API做在官方网站上,自然没有用户登陆,也没有很高查询成本,所以设计上没有任何鉴权无法进行身份认定,于是就被一个爬虫开了超高并发请求,直接后端的AWS Tomcat CPU被用尽,导致无法响应。爬虫显然...… Continue reading

Redis原子性事务Lua应用

Published on June 28, 2020