php中的单例模式和工厂模式

单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
所有的单例模式至少拥有以下三种公共元素:
1. 它们必须拥有一个构造函数,并且必须被标记为private
2. 它们拥有一个保存类的实例的静态成员变量
3. 它们拥有一个访问这个实例的公共的静态方法
单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

示例:
class Single {

private
$name;//声明一个私有的实例变量
    private
function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
    
    }

static
public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
    static
public function
getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
       
if(!self::$instance) self::$instance = new self();
       
return self::$instance;
    }

public
function setname($n){ $this->name = $n; }
    public
function getname(){ return $this->name; }
}

$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname(‘hello world‘);
$ob->setname(‘good morning‘);
echo $oa->getname();//good morning
echo $ob->getname();//good morning

工厂模式就是一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。这样如果想更改创建的对象类型,只需更改该工厂即可。

示例:
class Factory {//创建一个基本的工厂类
    static
public function fac($id){//创建一个返回对象实例的静态方法
       
if(1 == $id) return new A();
       
elseif(2==$id) return new B();
       
elseif(3==$id) return new C();
       
return new D();
    }
}

interface FetchName {//创建一个接口
    public
function getname();//
}

class A implements FetchName{
    private
$name = "AAAAA";
    public
function getname(){ return $this->name; }
}

class C implements FetchName{
    private
$name = "CCCCC";
    public
function getname(){ return $this->name; }
}
class B implements FetchName{
    private
$name = "BBBBB";
    public
function getname(){ return $this->name; }
}

class D implements FetchName{
    private
$name = "DDDDD";
    public
function getname(){ return $this->name; }
}

$o = Factory::fac(6);//调用工厂类中的方法
if($o instanceof FetchName){
  echo 
$o->getname();//DDDDD
}

$p=Factory::fac(3);
echo $p->getname();//CCCCC

时间: 2024-10-31 07:47:28

php中的单例模式和工厂模式的相关文章

(四)单例模式与工厂模式

在未读<JavaScript设计模式>这本书前,在我的印象里,单例模式就是每个类只会产生一个实例,非常简单.在细看到这个模式时候,有些疑惑单例模式与工厂模式的区别,虽然看起来像最大区别在于是否多次实例化. 单例(Singleton)模式 单例模式它限制了类的实例化次数只能一次.在实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例:如果实例已经存在,它会简单返回该对象的引用.(这跟我想的一样) 例子: var mySingleton = (function () { // Ins

PHP模式设计之单例模式、工厂模式、注册树模式、适配器模式、观察者模式

php模式设计之单例模式 什么是单例模式? 单例模式是指在整个应用中只有一个实例对象的设计模式 为什么要用单例模式? php经常要链接数据库,如果在一个项目中频繁建立连接数据库,会造成服务器资源的很大浪费,在团队合作项目中,也能够避免不同的程序员实例自己的对象,造成人为的系统消耗. 单例模式的三大原则 1.构造函数需要标记为非public(防止外部使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化 2.拥有一个保存类的实例的静态成员变量$_instance 3.拥有一个可

前端设计模式——单例模式和工厂模式

作为一个前端新人,学习了设计模式以后,希望能从源头上,用浅显易懂的语言来解释它.当然不一定是正确的,只是我个人对设计模式的一点浅显理解. 创建型设计模式 创建型设计模式:故名思意,这些模式都是用来创建实例对象的. 单例模式:首先我们需要理解什么是单例.单:指的是一个.例:指的是创建的实例.单例:指的是创建的总是同一个实例.也就是使用类创建的实例始终是相同的.我们先看下面的一段代码: class Person{ constructor(){} } let p1 = new Person(); le

设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)

什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂模式在cocos2d-x中怎么用,我们通过下面的小例子来了解一下. 假如我们在开发一款类似魔兽的RPG游戏,在游戏中会出现很多种族的角色,如:人族.兽族. 这些种族一般都会定义为一个类,如果兽族Orc类,人族Human类. 兽族.人族两个类都同样属于种族,那么我们可以

常见的设计模式:单例模式、工厂模式、观察者模式、装饰模式与适配器模式

常见的设计模式:单例模式.工厂模式.观察者模式.装饰模式与适配器模式 这里可以阅读Terry Lee的设计模式系列来理解学习一下 1.4.1 单例模式 .NET设计模式(2):单件模式(Singleton Pattern)  http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 1.4.2 抽象工厂模式 .NET设计模式(3):抽象工厂模式(Abstract Factory) http://terrylee.cnblogs.com/

单例模式和工厂模式(百度文库)

模式中的单例模式分为:饿汉模式和懒汉模式. 顾名思义: 饿汉模式是对食物(Singleton)比较渴望的,所有一开始就new了一个来满足(食欲) 饿汉式: public class Singleton{   private static Singleton singleton = new Singleton ();   private Singleton (){}   public static  Singleton getInstance(){return singletion;}   } 饿

php面向对象单例模式、工厂模式及6大原则

一.单例模式目的:为了控制对象的数量(只能够有一个,相当于类的计划生育)做法1.将类的构造函数做成私有的2.在类里面做了一个公有的函数来造对象3.将该函数变为静态的4.在函数里面加控制 class Ren { public $name; static public $dx; //静态成员变量用来存储该对象 private function __construct() //把构造函数设置为私有,类的外部就不能用new造对象了 { } static function DuiXiang() //做一个

php单例模式与工厂模式

单例模式:单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的. 所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为private2. 它们拥有一个保存类的实例的静态成员变量3. 它们拥有一个访问这个实例的公共的静态方法 代码: <?php class ren { public $name; private static $dx;//存储对象 //声明一个私有的实例变量 private function __c

从基础知识到重写Spring的Bean工厂中学习java的工厂模式

1.静态工厂模式其他对象不能直接通过new得到某个类,而是通过调用getInstance()方法得到该类的对象这样,就可以控制类的产生过程.顺带提一下单例模式和多例模式:  单例模式是指控制其他对象获得该对象永远只有同一个对象  而多例模式则是根据需要从某个具体集合中获取所需的对象 1 import java.util.ArrayList; 2 import java.util.List; 3 4 5 public class Car implements Moveable{ 6 private