脚本宝典收集整理的这篇文章主要介绍了php实现三种基本的设计模式--单例,工厂,注册,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
核心思想就是不能通过在类外new新建一个实例,通过instance,来创建实例,在创建时先判断是否存在,如果存在则返回当前实例,不存在即返回一个新建的实例,我们看一下PHP的实现
代码:
<?PHP
class test{
PRivate static $instance;
private function __construct()
{
}
public static function get_instance(){
if(self::$instance==null){
self::$instance=new test();
}
return self::$instance;
}
}
$a=test::get_instance();
$b=test::get_instance();
if($a==$b){
echo "这是一个对象哦";
}
C:\wamp64\bin\PHP\PHP7.0.10\PHP.exe C:\wamp64\www\api\test.PHP
这是一个对象哦
Process finished wITh exit code 0
需要注意的几点:构造函数必须是私有的,才能保证不能类外new一个实例,有一个静态私有变量储存实例,每次创建的时候就判断它是否为空就知道是否已经创建了,所以上面创建两次,其实是一个,这就是单例模式。
工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,虽然工厂方法可以任意命名这个静态还可以接受任意数据的参数,必须返回一个对象。
大概我的理解就是所需要的实例都可以通过工厂进行创造,我们给工厂我们想要的对象名,他给我返回一个实体,然后我们就可以正常使用。我们通过代码理解一下
代码:
<?PHP
class test{
private static $instance;
private function __construct()
{
}
public static function get_instance(){
if(self::$instance==null){
self::$instance=new test();
}
return self::$instance;
}
}
class Factor{
public static function createoj($classname){
$oj=$classname::get_instance();
return $oj;
}
}
$a=Factor::createoj('test');
var_dump($a);
C:\wamp64\bin\PHP\PHP7.0.10\PHP.exe C:\wamp64\www\api\test.PHP
object(test)#1 (0) {
}
Process finished with exit code 0
这是简单的实现,结合上个单例模式,定义了工厂类后,把要的对象传给他,让他去创建实例,并返回给我们。
把所有注册过的对象都存储起来,有用的时候直接通过get方法拿一个出来
代码:
<?PHP
class test{
private static $instance;
public $a=1;
private function __construct()
{
}
public static function get_instance(){
if(self::$instance==null){
self::$instance=new test();
}
return self::$instance;
}
}
class Factory{
public static function createoj($classname){
$oj=$classname::get_instance();
return $oj;
}
}
class Register{
protected static $objects;
public static function set($alias,$object){
self::$objects[$alias]=$object;
}
public static function get($alias){
return self::$objects[$alias];
}
public static function _unset($alias){
unset(self::$objects[$alias]);
}
}
Register::set('rand',Factory::createoj('test'));
$object=Register::get('rand');
print_r($object);
C:\wamp64\bin\PHP\PHP7.0.10\PHP.exe C:\wamp64\www\api\test.PHP
test Object
(
[a] => 1
)
Process finished with exit code 0
我特意加了一个public变量,让大家理解的更明白一些,其中rand就是储存在注册树中的键名
以上是脚本宝典为你收集整理的php实现三种基本的设计模式--单例,工厂,注册全部内容,希望文章能够帮你解决php实现三种基本的设计模式--单例,工厂,注册所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。