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. ElasticSearch读写原理

    es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? es 写数据过程 客户端选择一个 node 发送请求过去,这个 node 就是  ...

  2. PAT甲题题解1099. Build A Binary Search Tree (30)-二叉树遍历

    题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子. ...

  3. 第二个Spring冲刺周期团队进展报告

    第一天:找识别不了的原因 第二天:继续找识别不了的原因 第三天:找文字库,找到tessdata语言包,放到手机SD卡根目录 第四天:了解OCR引擎 第五天:将导入tess-two导入到项目中,并进行测 ...

  4. 学习电脑编码utf-8,ansi编码的基础知识等

    大学时期就很好奇,我们所看到的文字在电脑里面是怎么记忆的,感觉不可能是文字本身,今天刚好学习java的io流知识,顺便补充了一下电脑编码知识,先看一下下面小王和小张的例子,然后思考电脑怎么存放文字?  ...

  5. 读C#程序(第三周)

    阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...

  6. ElasticSearch 2 (14) - 深入搜索系列之全文搜索

    ElasticSearch 2 (14) - 深入搜索系列之全文搜索 摘要 在看过结构化搜索之后,我们看看怎样在全文字段中查找相关度最高的文档. 全文搜索两个最重要的方面是: 相关(relevance ...

  7. Alpha冲刺第6天

    Alpha第六天 1.团队成员 郑西坤 031602542 (队长) 陈俊杰 031602504 陈顺兴 031602505 张胜男 031602540 廖钰萍 031602323 雷光游 03160 ...

  8. PAT 1063 计算谱半径

    https://pintia.cn/problem-sets/994805260223102976/problems/994805267860930560 在数学中,矩阵的“谱半径”是指其特征值的模集 ...

  9. 百度搜索 “Java面试题” 前200页(面试必看)

    前言 本文中的题目来源于网上的一篇文章<百度搜索 "Java面试题" 前200页>,但该文章里面只有题目,没有答案.因此,我整理了一些答案发布于本文.本文整理答案的原则 ...

  10. Xml文档添加节点和属性

    XmlDocument doc = new XmlDocument(); XmlElement xmlElement = doc.CreateElement("节点名称"); xm ...