设计模式-PHP实现单件模式的几种方式

单件模式是我们在开发中经常用到的一种设计模式,利用PHP5面向对象的特性,我们可以很容易的构建单件模式的应用,下面是单件模式在PHP中的几种实现方法:

class Stat{
    static $instance = NULL;
    
    static function getInstance(){
        if(self::$instance == NULL){
            self::$instance = new Stat();
        }
        
        return self::$instance;
    }
    
    private function __construct(){
    }
    
    private function __clone(){
    }    
    
    function sayHi(){
        return "The Class is saying hi to u ";
    }
}

echo Stat::getInstance()->sayHi();

 

这是一种最通常的方式,在一个getInstance方法中返回唯一的类实例。

对这里例子稍加修改,便可以产生一个通用的方法,只要叫道任何你想用到单件的类里,就可以了。

class Teacher{
    function sayHi(){
        return "The teacher smiling and said 'Hello '";
    }
    
    static function getInstance(){
        static $instance;
        
        if(!isset($instance)){
            $c = __CLASS__;
            $instance = new $c;
        }
        
        return $instance;
    }
}

echo Teacher::getInstance()->sayHi();

 

最后一种是提供一个singleton类,然后通过调用getInstance方法,可以为任何一个类生产出一个实例来。

class singleton{
    function getInstance($class){
        static $instances = array();
        if(!array_key_exists($class,$instances)){
            $instances[$class] = &new $class;
        }
        $instance = $instances[$class];
        
        return $instance;
    }
}

class People{
    function sayHi(){
        return 'Hello i am a people?';
    }
}

echo "<br />";
echo singleton::getInstance('People')->sayHi();

 

通过这三种方法,我们可以很容易的应用单件模式,如果能够结合工厂模式,将使我们的编程变得更有条理和效率。

时间: 2024-08-02 22:49:44

设计模式-PHP实现单件模式的几种方式的相关文章

PHP实现单件模式的几种方式

单件模式是我们在开发中经常用到的一种设计模式,利用PHP5面向对象的特性,我们可以很容易的构建单件模式的应用,下面是单件模式在PHP中的几种实现方法: class Stat{ static $instance = NULL; static function getInstance(){ if(self::$instance == NULL){ self::$instance = new Stat(); } return self::$instance; } private function __

.NET中的设计模式二:单件模式

设计 单件模式(Singleton)是一个非常简单的模式,这是我第一个理解并且能运用的模式.有时候模式的复杂程度并不在于本身,而是由于他的应用目的.最初的时候面对一个模式经常充满了困惑,一个简单的调用为什么要搞的如此复杂?为什么要建立这么多类,只是为了打开一个文件. 通常说来学习一个模式是一个接受.认可.领会的过程.接受:了解模式的结构,了解实例的意义:认可:认可该模式在实际工程中的作用和可行性:领会:将模式应用到开发过程中. 而模式的应用目的说到底无非是为了降低模块之间在时间和空间上的耦合程度

《JavaScript设计模式》——1.11 换一种方式使用方法

1.11 换一种方式使用方法 "可是在你测试的时候,你用的是函数式调用方式?对于习惯于类式调用方式的同学来说,他们可以这样简单更改一下." Function.prototype.addMethod = function(name, fn){ this.prototype[name] = fn; } "此时我们还按照上一种方式添加方法." var Methods = function(){}; methods.addMethod('checkName', functi

复制社区营销模式的两种方式

2005年6-8月,我做完百度<唐伯虎>之后,很多人问我能传播多少人,能否复制等.坦率地说,纯粹的"口碑"与广告没有太大关系,而与平台或产品有很大关系.这是一个非常现实的问题. 直到最近几个月之前,我还是觉得口碑营销的本质是创意,而不是一个严格意义上的媒体传播方式.比如芙蓉姐姐这样的人只是一个创意.但是,最近几个月我的看法发生很大变化,我现在很明确地说:如果跳出口碑营销这个概念本身,我认为是可以复制的. 可以用两种方法来做到复制: 一种方法是能与BBS结合的.有顶帖回帖性质

php设计模式总结-单件模式

一.单件模式 英文叫做sington.其他语言中有叫做单例模式,其实都是一样的道理.保证只会出现单个实例,所以是单例.翻译成单件,永远只会产生一件,呵呵. 还有翻译成单元素模式.其实关键是看这个英文比较好.英文是sington,统一是使用这个单词. 单件模式的目的我理解如下: 避免重复创建(实例化)对象,已经有现成的实例就用现成的. 减少资源的浪费(因为创建多个实例,浪费内存,完全没必要),单件模式保证了每时每刻引用的都是同一个实例. 为什么同时创建多个实例会引起逻辑上的错误呢? $obj1$o

.NET简谈设计模式之(单件模式)

我们继续学习设计模式系列文章. 今天要讲的是单件模式,其实单件模式是比较简单的设计模式,在我们日常开发过程中也是经常用到的. 单件模式:单件模式是一种用于确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享时的程序设计方法. 我想如果初学者对一些基本概念能熟练掌握时,其实单件模式是很简单的,就是因为初学者对一些概念还不是很理解,我们先来扫除这些阻挡我们理解的障碍. 大部分的初学者都会搞不清楚"静态对象"与"实例对象"的区别.当然谁都有一个过渡期,

php单件模式

Discuz X将uchome,dz 的部分代码进行了重写,抛弃了原有产品的common.inc.php,而采用类的形式,运用了设计模式中的单件模式. Java代码   function &instance() {       static $object;       if(empty($object)) {           $object = new discuz_core();       }       return $object;   }   /*  # $pig1 = PHPi

设计模式(二)单件模式Singleton(创建型)

SINGLETON(单件)-对象创建型模式        几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销.再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录. 1. 问题 怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例易于被访问呢? 2. 解决方案 1)全局变量:一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个

.NET设计模式:单件模式(Singleton Pattern)

概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点.这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任. 从另一个角度来说,Singleton模式其实也是一种职责型模式.因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 意图