PHP------单例模式和工厂模式

单例模式和工厂模式

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

例子:

 1 class Single {
 2     private $name;//声明一个私有的实例变量
 3     private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
 4
 5     }
 6
 7     static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
 8     static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
 9         if(!self::$instance) self::$instance = new self();
10         return self::$instance;
11     }
12
13     public function setname($n){ $this->name = $n; }
14     public function getname(){ return $this->name; }
15 }
16
17
18 $oa = Single::getinstance();
19 $ob = Single::getinstance();
20 $oa->setname(‘hello world‘);
21 $ob->setname(‘good morning‘);
22 echo $oa->getname();//good morning
23 echo $ob->getname();//good morning

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

例子:

 1 class Factory {//创建一个基本的工厂类
 2     static public function fac($id){//创建一个返回对象实例的静态方法
 3         if(1 == $id) return new A();
 4         elseif(2==$id) return new B();
 5         elseif(3==$id) return new C();
 6         return new D();
 7     }
 8 }
 9
10 interface FetchName {//创建一个接口
11     public function getname();//
12 }
13
14 class A implements FetchName{
15     private $name = "AAAAA";
16     public function getname(){ return $this->name; }
17 }
18
19 class C implements FetchName{
20     private $name = "CCCCC";
21     public function getname(){ return $this->name; }
22 }
23 class B implements FetchName{
24     private $name = "BBBBB";
25     public function getname(){ return $this->name; }
26 }
27
28 class D implements FetchName{
29     private $name = "DDDDD";
30     public function getname(){ return $this->name; }
31 }
32
33
34 $o = Factory::fac(6);//调用工厂类中的方法
35 if($o instanceof FetchName){
36   echo  $o->getname();//DDDDD
37 }
38
39 $p=Factory::fac(3);
40 echo $p->getname();//CCCCC
时间: 2024-10-11 23:25:38

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;//声明一个私