1.工厂模式,工厂方法或者类生成对象,而不是在代码中直接new

2.单例模式,使某个类的对象仅允许创建一个

3.注册模式,全局共享和交换对象

项目文件目录

入口文件 index.php

 <?php
/**
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午3:42
*/ define('BASEDIR',__DIR__);
include BASEDIR.'/Imooc/Loader.php';
spl_autoload_register('\\Imooc\\Loader::autoload'); Imooc\Factory::CreateDatabase(); //初始化对象
$db=Imooc\Register::_get('db');
$db->field()->where()->order()->group()->limit()->select();

自动加载类 Loader.php

 <?php
/**
* 自动加载类
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午4:12
*/ namespace Imooc; class Loader { public static function autoload($class){
require_once BASEDIR.'/'.str_replace('\\','/',$class).'.php';
} }

工厂类 Factory.php

 <?php
/**
* 工厂类
*
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午3:53
*/ namespace Imooc; class Factory { public static function CreateDatabase(){
$db=Dbtabase::getInstance();
Register::_set('db',$db); //注册到对象树
return $db;
} }

注册树类 Register.php

 <?php
/**
* 注册树类
*
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午5:04
*/ namespace Imooc; class Register { protected static $Objects; /**
* 注册到对象树
*
* @param $alias 对象映射
* @param $object 对象
*/
public static function _set($alias,$object){
self::$Objects[$alias]=$object;
} /**
* 获取对象树对象
*
* @param $alias 对象映射
* @return mixed
*/
public static function _get($alias){
return self::$Objects[$alias];
} /**
* 注销对象树对象
*
* @param $alias 对象映射
*/
public static function _unset($alias){
unset(self::$Objects[$alias]);
} }

数据库操作类 Dbtabase.php

 <?php
/**
* 数据库操作类
*
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午4:05
*/ namespace Imooc; class Dbtabase { private static $_instance; protected $option=array(); /**
* 构造方法
*/
private function __construct(){ } /**
* 单例模式创建对象
*
* @return Dbtabase
*/
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
} public function __set($key,$value){
$this->option[$key]=$value;
} public function __get($key){
return $this->option[$key];
} /**
* 调用不存在方法名时回调函数
*
* @param $func 方法名
* @param $param 参数
* @return string
*/
public function __call($func,$param){
return "magic function\n";
} /**
* 调用不存在静态方法名时回调函数
*
* @param $func 方法名
* @param $param 参数
* @return string
*/
public static function __callStatic($func,$param){
return "magic static function\n";
} /**
* 打印对象时回调函数
*
* @return string
*/
public function __toString(){
return __CLASS__;
} /**
* 将对象当函数使用时回调函数
*
* @param $param 参数
*/
public function __invoke($param){
return "invoke";
} /**
* 析构方法
*/
function __destruct(){ } public function field(){
return $this;
} public function where(){
return $this;
} public function order(){
return $this;
} public function group(){
return $this;
} public function limit(){
return $this;
} public function select(){
return $this;
} }

前台项目控制器类 index.php

 <?php
/**
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午5:57
*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/ namespace App\Home\Controller; class index { public function index(){
echo "Hello,World!";
} }

PHP 设计模式 单例模式 工厂模式 注册模式的更多相关文章

  1. 设计模式之工厂方法(FactoryMethod)模式

    在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的工厂方法(FactoryMethod)模式 ...

  2. java设计模式,工厂,代理模式等

    javaEE设计模式: 工厂模式:主要分为三种模式: 定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到子类中进行. 为什么要使用工厂模式: (1) 解耦 : ...

  3. java 设计模式 单例模式之饿汉模式/懒汉模式 singleton pattern

    https://v.qq.com/x/page/e0364ung5zp.html 讲的不错, 关于 饿汉式单例模式 code Student 类: package com.test;//单例模式之   ...

  4. [C#]设计模式-简单工厂-创建型模式

    在设计模式当中有三大工厂,分别是 简单工厂.抽象工厂.工厂方法 这三种创建实例的设计模式,这里先从简单工厂将其,从名字就可以看出这是这三种工厂模式当中最为简单的一种实现. 简单工厂一般由以下几个对象组 ...

  5. Java设计模式 - 单例模式(创建型模式)

    单例模式我在上学期看一些资料时候学习过,没想到这学期的软件体系结构就有设计模式学习,不过看似篇幅不大,介绍得比较简单,在这里我总结下单例模式,一来整理之前的笔记,二来也算是预习复习课程了. 概述 单例 ...

  6. [C#]设计模式-抽象工厂-创建型模式

    介绍了简单工厂与工厂方法之后,现在我们来看一下工厂三兄弟的最后一个 -- 抽象工厂. 那什么是抽象工厂呢? 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相 ...

  7. Java设计模式——单例模式(创建型模式)

    概述   单例模式保证对于每一个类加载器,一个类仅有一个实例并且提供全局的访问.其是一种对象创建型模式.对于单例模式主要适用以下几个场景: 系统只需要一个实例对象,如提供一个唯一的序列号生成器 客户调 ...

  8. PHP 设计模式 笔记与总结(6)基础设计模式:工厂模式、单例模式和注册树模式

    三种基础设计模式(所有面向对象设计模式中最常见的三种): ① 工厂模式:使用工厂方法或者类生成对象,而不是在代码中直接new 在 Common 目录下新建 Factory.php: <?php ...

  9. PHP设计模式-工厂模式、单例模式、注册模式

    本文参考慕课网<大话PHP设计模式>-第五章内容编写,视频路径为:http://www.imooc.com/video/4876 推荐阅读我之前的文章:php的设计模式 三种基本设计模式, ...

随机推荐

  1. Unity---Inspector面板自定义

    一. 参数自定义 一个含有成员的类Player using System.Collections; using System.Collections.Generic; using UnityEngin ...

  2. 【机器学习】Apriori算法——原理及代码实现(Python版)

    Apriopri算法 Apriori算法在数据挖掘中应用较为广泛,常用来挖掘属性与结果之间的相关程度.对于这种寻找数据内部关联关系的做法,我们称之为:关联分析或者关联规则学习.而Apriori算法就是 ...

  3. 配置tomcat虚拟路径

    这个问题其实很简单,首先找到你安装的tomcat的路径然后,在Tomcat6.0/conf/Catalina路径下创建localhost文件夹,如果有,就不用创建,然后在该文件夹下创建一个xml文件, ...

  4. Backbone.js源码浅介

    终于看到一个只有一千多行的js框架了,于是抱着一定可以看懂他的逻辑的心态,查看了他的整个源码,进去之后才发现看明白怎么用容易,看懂怎么写的就难了,于是乎有了这篇博客的标题:浅介,只能粗浅的介绍下Bac ...

  5. Linux内核分析(第二周)

    操作系统是如何工作的? 一.总结:三大法宝 1.存储程序计算机 + 函数调用堆栈 + 中断机制 2.堆栈:C语言程序运行时候必须的一个记录调用路径和参数的空间(函数调用框架/提供局部变量/传递参数/保 ...

  6. deepin 下mysql编码问题utf8的解决

    deepin 下mysql编码问题utf8的解决 参考链接 http://www.ha97.com/5359.html 与之不同的地方在第二歩 二.最简单的完美修改方法,修改mysql的my.cnf文 ...

  7. Beta 冲刺 七

    团队成员 051601135 岳冠宇 031602629 刘意晗 031602248 郑智文 031602330 苏芳锃 031602234 王淇 项目进展 岳冠宇 昨天的困难 换了种方法写了搜索栏, ...

  8. swoole多进程

    <?php /** * Created by PhpStorm. * User: brady * Date: 2018/11/19 * Time: 16:29 */ $workers = []; ...

  9. qemu-img.exe 工具 简介

    1. 下载地址 https://cloudbase.it/qemu-img-windows/ 2. 解压缩 然后扔到 system32目录下 或者是 修改环境变量-- 我很懒,我决定扔到system3 ...

  10. PHP从入门到精通

    php基本语法 1.变量类型 a.标量类型 bool integer float string b.复合类型 array object c.特殊类型 resource null d.伪类型 mixd ...