PHP设计模式之工厂模式、单例模式和注册模式
程序员文章站
2022-04-26 18:29:27
...
所有面向对象中最常见的三种设计模式分别是:工厂模式,单例模式,注册(器)模式
工厂模式,工厂方法或者类产生对象,百不是在代码中直接new
单例模式,使某个类的对象仅允许创建一个
注册模式,全局共享和交换对象
工厂模式factory.php
<?php class Database{ public function __construct() { return "Database\n"; } } //工厂类 class Factory{ public static function createDatabase() { $db = new Database(); return $db; } } $db = Factory::createDatabase(); $db1 = Factory::createDatabase(); $db2 = Factory::createDatabase(); var_dump($db, $db1, $db2); #object(Database)#1 (0) { #} #object(Database)#2 (0) { #} #object(Database)#3 (0) { #}
单例模式singleton.php
<?php //单例模式 class Database{ protected static $db; //构造方法私有,防止在外层直接new private function __construct(){ //code } static function getInstance(){ if (self::$db) { return self::$db; }else{ self::$db = new self(); return self::$db; } } } $db = Database::getInstance(); $db1 = Database::getInstance(); $db2 = Database::getInstance(); var_dump($db, $db1, $db2); #object(Database)#1 (0) { #} #object(Database)#1 (0) { #} #object(Database)#1 (0) { #}
工厂模式和单例结合使用
<?php class Database{ protected static $db; private function __construct(){ } static function getInstance(){ if (self::$db) { return self::$db; }else{ self::$db = new self(); return self::$db; } } } class Factory{ public static function createDatabase(){ return Database::getInstance(); } } var_dump(Factory::createDatabase());
注册器类register.php
<?php //注册器模式 class Register { protected static $objects; static function set($alias, $object){ self::$objects[$alias] = $object; } static function get($name){ return self::$objects[$name]; } function _unset($alias){ unset(self::$objects[$alias]); } } Register::set('db1', $db); Register::get('db1');
更多PHP设计模式之工厂模式、单例模式和注册模式相关文章请关注PHP中文网!