php单例模式和工厂模式

一、单例模式

一个类只能实例化一个对象

class Ren
{
private static $dx; //用来存储生成的对象,静态方法调用静态成员
public $name;

//私有的构造函数
private function __construct()
{

}
//生成对象的方法
public static function DuiXiang()
{
if(empty(self::$dx))//判断是否为空,如果空,则new一个新的对象
{
self::$dx = new Ren();
}

return self::$dx;
}
}

$r = Ren::DuiXiang();
$r->name = "张三";

$r1 = Ren::DuiXiang();

var_dump($r1);

二、工厂模式

第一种方式: 安全性不高

class suan

{

public $a;

public $b;

function jia()

{

return $this->a+$this->b;

}

function jian()

{

return $this->a-$this->b;

}

}

$s=new suan();

$s->a=10;

$s->b=5;

echo $s->jia();

  第二种方式:可拓展性强

class YunSuan

{

public $a;

public $b;

function Suan()

{

}

}

class Jia extends YunSuan

{

function Suan()

{

return $this->a+$this->b;

}

}

class Jian extends YunSuan

{

function Suan()

{

return $this->a-$this->b;

}

}

$s = new Jia();

$s->a=10;

$s->b=5;

echo $s->Suan();

  第三种方式:工厂模式  

目的:解决第二种方式的缺点:当有很多子类时,方法名可能会重,从而通过运算符的不同来确定不同的对象

class YunSuan

{

public $a;

public $b;

function Suan()

{

}

}

class Jia extends YunSuan

{

function Suan()

{

return $this->a+$this->b;

}

}

class Jian extends YunSuan

{

function Suan()

{

return $this->a-$this->b;

}

}            //到此为止与第二种方式一样 ;目的是解决当有很多子类时,方法名可能会重,从而通过运算符的不同来确定不同的类

class GongChang

{

static function ShengChan($f)

{

switch($f)

{

case "+":

return new Jia();

break;

case "-":

return new Jian();

break;

}

}

}

$r = GongChang::ShengChan("-");

$r->a=10;

$r->b=5;

echo $r->Suan();

  

时间: 2024-08-05 11:18:23

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

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

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

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

常见的设计模式:单例模式.工厂模式.观察者模式.装饰模式与适配器模式 这里可以阅读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/

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

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

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

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

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

模式中的单例模式分为:饿汉模式和懒汉模式. 顾名思义: 饿汉模式是对食物(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

单例模式和工厂模式的简单理解

//什么是单例模式?//单例模式就是在核心就够中只包含一个被称作单例的特殊的类,通过单例模式可以保证系统中一个类只有一个实例,也就是说一个类只有一个对象实例using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class danli { static void Main(s

java:常用的两种设计模式(单例模式和工厂模式)

一.单例模式:即一个类由始至终只有一个实例.有两种实现方式(1)定义一个类,它的构造方法是私有的,有一个私有的静态的该类的变量在初始化的时候就实例化,通过一个公有的静态的方法获取该对象.Java代码 1. //单例模式的第一种形式    2. public class Singleton01 {    3.    4.     // 私有的静态属性    5.     private static Singleton01 instance = new Singleton01();    6.  

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

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