php实现三种基本的设计模式--单例,工厂,注册
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php实现三种基本的设计模式--单例,工厂,注册,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2610字,纯文字阅读大概需要4分钟。
内容图文
![php实现三种基本的设计模式--单例,工厂,注册](/upload/InfoBanner/zyjiaocheng/837/57260efaceb643ed921ac295cf024041.jpg)
单例模式:确保创建的是唯一的实例
核心思想就是不能通过在类外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实现三种基本的设计模式--单例,工厂,注册所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。