PHP设计模式之工厂/单例/注册者模式

工厂模式

简单工厂模式 【静态工厂方法模式】(Static Factory Method)
是类的创建模式

工厂模式的几种形态:

1、简单工厂模式(Simple Factory)又叫做 静态工厂方法模式(Static Factory Method)

2、工厂方法模式(Factory Method)又叫做 多态性工厂模式(Polymorphic Factory)

3、抽象工厂模式(Abstract Factory)又叫做 工具箱模式(ToolKit)

创建工厂类

<?phprequire_once ("test.php");

class Factory{    public static function createObj()    {        $obj = new test();        return $obj;    }}

调用工厂类中的静态方法创建对象

<?phprequire_once ("Factory.php");

//$test = new test();$test = Factory::createObj();echo $test->name;

单例模式

创建类的唯一实例

test.php

<?php

class test{    private static $_instance = null;    private function __construct()    {        echo "create obj";    }    private function __clone()    {

    }    public static function getInstance()    {        if (static::$_instance === null)        {            static::$_instance = new static;  //使用static替代self,static关键字来访问静态的方法或者变量,与self不同,static的引用是由运行时决定,保证继承有效        }        return static::$_instance;    }}

index.php

<?phprequire_once ("test.php");

$obj = test::getInstance();

注册器模式

单例模式保证了一个类中只有一个实例被全局访问,当你有一组全局对象被全局访问时可能就需要用到注册者模式 (registry),它 提供了在程序中有条理的存放并管理对象 (object)一种解决方案。一个“注册模式”应该提供get() 和 set()方法来存储和取得对象(用一些属性key)而且也应该提供一个isValid()方法来确定一个给定的属 性是否已经设置。 
注册模式通过单一的全局的对象来获取对其它对象的引用

register.php 注册器读写类

<?php

class Registry extends ArrayObject

{

  private static $_instance = null;

  /**

   * 取得Registry实例

   *

   * @note 单件模式

   *

   * @return object

   */

  public static function getInstance()

  {

    if (self::$_instance === null) {

      self::$_instance = new self();

      echo "new register object!";

    }

    return self::$_instance;

  }

  /**

   * 保存一项内容到注册表中

   *

   * @param string $name 索引

   * @param mixed $value 数据

   *

   * @return void

   */

  public static function set($name, $value)

  {

    self::getInstance()->offsetSet($name, $value);

  }

  /**

   * 取得注册表中某项内容的值

   *

   * @param string $name 索引

   *

   * @return mixed

   */

  public static function get($name)

  {

    $instance = self::getInstance();

    if (!$instance->offsetExists($name)) {

      return null;

    }

    return $instance->offsetGet($name);

  }

  /**

   * 检查一个索引是否存在

   *

   * @param string $name 索引

   *

   * @return boolean

   */

  public static function isRegistered($name)

  {

    return self::getInstance()->offsetExists($name);

  }

  /**

   * 删除注册表中的指定项

   *

   * @param string $name 索引

   *

   * @return void

   */

  public static function remove($name)

  {

    self::getInstance()->offsetUnset($name);

  }

}

test.php 需要注册的类

<?php

class Test

{

   function hello()

   {

    echo "hello world";

    return;

   }

}

?>
index.php 测试类

<?php

//引入相关类

require_once "Registry.class.php";

require_once "test.class.php";

//new a object

$test=new Test();

//$test->hello();

//注册对象

Registry::set(‘testclass‘,$test);

//取出对象

$t = Registry::get(‘testclass‘);

//调用对象方法

$t->hello();

?>

时间: 2024-11-10 07:49:13

PHP设计模式之工厂/单例/注册者模式的相关文章

Java设计模式中的单例设计

/** * 单例设计模式 * 应用场合:只需要一个对象的 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型有:饿汉模式.懒汉模式 * 下面的例子是一个饿汉模式的例子 */ class SingleDemo { // 1.将构造方法私有化,不允许外部直接创建使用 private SingleDemo() {} // 2.创建类的唯一实例,使用private static修饰 private static SingleDemo instance = new SingleDemo(); //

Swift百万线程攻破单例(Singleton)模式

一.不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法.单例的实现有多种方法,如下面: class SwiftSingleton { class var shared: SwiftSingleton { if !Inner.instance { Inner.instance = SwiftSingleton() } return Inner.instance! } struct Inner { static var instance: SwiftSingleto

&quot;围观&quot;设计模式(29)--创建型设计模式总结(单例、工厂、原型、创建者)

设计模式源码下载地址 设计模式源码下载地址 1  单例模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概

iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)

关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. 首先得搞清楚设计模式是个什么鬼,在软件设计领域,设计模式是对通用问题的可复用的解决方案.设计模式是一系列帮你写出更可理解和复用代码的模板,设计模式帮你创建松耦合的代码以便你不需要费多大力就可以改变或者替换代码中的组件 其实iOS中的设计模式有非常多,常用的就下面这四种 一.MVC设计模式(设计模式

[java]设计模式之singleton(单例)

在日常工作中,有很多对象,我们只需要一个.比如:线程池, 缓存,注册表等.如果制造出多个实例,就会导致许多问题,如程序行为异常,资源使用过量等.这就需要对对象的构建进行控制,使其只能产生一个对象.这就是本篇要讲的设计模式--singleton(单例). 单例模式的定义:确保只有一个类只有一个实例,并提供一个全局访问点. 那么,要如何实现单例模式,使得一个类只能产生一个对象呢?请看下面的实现: public class Singleton { private static Singleton s;

设计模式整理_单例设计模式

单例设计模式,它确保一个类只有一个实例,并提供一个全局访问点. 由于单例设计模式对应的类只能创建一个对象,因此它所对应的方法必须是static(不是static只有创建对象才能调用). 以下是单例模式的一个经典实现:采用了延迟加载对象的例子. public class Single1 { private static Single1 single; //利用一个静态变量来记录Single1的唯一实例,这里没有直接声明,采用了延迟加载模式. private Single1(){} //把构造器声明

设计模式(一)__单例设计模式

先来介绍一下什么是设计模式,设计模式起先是从建筑行业借鉴来的,然后慢慢发展到了今天这个样子. 设计模式是解决问题最行之有效的思想,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. java有23种设计模式,今天就先来介绍一种:单例设计模式 单例设计模式: 有时候当你需要保证一个类在内存中的对象唯一性的时候,比如多程序读取一个配置文件时,建议配置文件封装成对象.会方便操作其中数据,又要保证多个程序读到的是同一

设计模式之:单例设计模式

单例设计模式 单例设计模式概述 单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供. 优点 在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能. 缺点 没有抽象层,因此扩展很难. 职责过重,在一定程序上违背了单一职责 单例模式: 饿汉式:类一加载就创建对象 懒汉式:用的时候,才去创建对象 例子1:单例设计模式之饿汉式 public classStudent { // 构造私有 private Student()

Java设计模式:Singleton(单例)模式

概念定义 Singleton(单例)模式是指在程序运行期间, 某些类只实例化一次,创建一个全局唯一对象.因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式. 单例模式主要是为了避免创建多个实例造成的资源浪费,以及多个实例多次调用容易导致结果出现不一致等问题.例如,一个系统只能有一个窗口管理器或文件系统,一个程序只需要一份全局配置信息. 应用场景 资源共享的情况下,避免由于资源操作时导致的性能或损耗等.如缓存.日志对象.应用配置. 控制资源的情况下,方便资源之