
Hacl.php
<?phpnamespace Baobab;class Hacl{public $id;public $haclname;public $haclcode;public $hacls;protected $db;function __construct($id){$this->db = new BaobabDatabaseMysqli();$this->db->connect("127.0.0.1", "root", "", "test");$res = $this->db->query("select * from ha_cl where id = {$id}");$data = $res->fetch_assoc();$this->id = $data["ID"];$this->haclname = $data["ha_cl_name"];$this->haclcode = $data["ha_cl_code"];$this->hacls = $data["hacls"];}function __destruct(){$this->db->query("update ha_cl setha_cl_code = "{$this->haclcode}",ha_cl_name = "{$this->haclname}",hacls = "{$this->hacls}"where ID = {$this->id}limit 1");}}Factory.php<?phpnamespace Baobab;class Factory{static function getHacl($id){$key = "user_".$id;$user = BaobabRegister::get($key);//表中id不同表示的是不同的对象if(!$user){$user = new BaobabHacl($id);BaobabRegister::set($key, $user);}return $user;}}Register.php<?phpnamespace Baobab;class Register{protected static $objects;static function set($alias, $object){self::$objects[$alias] = $object;}static function _unset($alias) {unset(self::$objects[$alias]);}static function get($name) {return self::$objects[$name];}}index.phpclass Page{function index(){$hacl = BaobabFactory::getHacl(13);$hacl->haclname = "测试名称";$this->test();echo "ok";}function test(){$hacl = BaobabFactory::getHacl(13);$hacl->hacls = "测试内容";}}$page = new Page();$page->index(); 使用工厂模式会多次创建对象Hacl,浪费资源,如果将对象作为参数传递,一方面会带来额外的使用成本,另外如果很多地方都用到这个对象很容易发生错误,因此在工厂模式中使用注册树模式来解决这个问题。