单例模式:确保创建的是唯一的实例
核心思想就是不能通过在类外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就是储存在注册树中的键名
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。