我有几个基本上是数据库行接口的类。由于该类假定行已存在(__construct
需要字段值),因此有一个公共静态函数允许创建行并返回该类的实例。
这是一个伪代码(因此存在错误和缺失的改进)示例:
class fruit {
public $id;
public function __construct( $id ) {
if ( ! is_numeric($id) ) {
throw new Exception("Id is not numeric.");
}
$this->id = $id;
$sql = "SELECT * FROM Fruits WHERE id = $id";
...
$this->arrFieldValues[$field] = $row[$value];
}
public function __get( $var ) {
return $this->arrFieldValues[$var];
}
public function __set( $var, $val ) {
$sql = "UPDATE fruits SET $var = " . mysql_real_escape_string($val) . " WHERE id = $this->id";
}
public static function create( $fruit ) {
$sql = "INSERT INTO Fruits ( fruit_name ) VALUE ( '" mysql_real_escape_string($fruit) . "' )";
$id = mysql_insert_id();
$fruit = & new fruit($id);
return $fruit;
}
}
$obj1 = fruit::create( "apple" );
$obj2 = & new fruit( 12 );
这种模式叫什么?
编辑:我将示例更改为具有更多数据库接口功能的示例。在大多数情况下,这类课程将通过__construct()
正常实例化。但有时当您需要先创建新行时,您可以调用create()
。
答案 0 :(得分:5)
我认为这是Factory method pattern。
工厂方法模式是一种面向对象的设计模式,用于实现工厂的概念。
与其他创作模式一样,它处理创建对象(产品)的问题,而不指定将要创建的确切对象类。工厂方法设计模式通过定义用于创建对象的单独方法来处理此问题,然后子类可以覆盖以指定将要创建的产品的派生类型。
在设计模式的范围之外,术语工厂方法也可以指工厂的方法,其主要目的是创建对象。
答案 1 :(得分:0)
由于这与数据库有关,我认为这与可能被称为 Data Mapper 的内容很接近。
如果您在PHP中寻找类似的内容,请转到Propel ORM。看看第一个例子:它几乎是你的代码!