use*_*841 1 php oop design-patterns
我有几个类基本上是数据库行的接口.由于该类假定行已经存在(__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 );
Run Code Online (Sandbox Code Playgroud)
这种模式叫什么?
编辑:我将示例更改为具有更多数据库接口功能的示例.在大多数情况下,这种类通常会被实例化__construct().但有时当你需要先创建一个新行时,你会打电话create().
我认为这是Factory方法模式.
工厂方法模式是一种面向对象的设计模式,用于实现工厂的概念.
与其他创建模式一样,它处理创建对象(产品)的问题,而不指定将要创建的确切对象类.工厂方法设计模式通过定义用于创建对象的单独方法来处理此问题,然后子类可以覆盖以指定将要创建的产品的派生类型.
在设计模式的范围之外,术语工厂方法也可以指工厂的方法,其主要目的是创建对象.