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. 深入理解docker信号机制以及dumb-init的使用

    一.前言 ● 容器中部署的时候往往都是直接运行二进制文件或命令,这样对于容器的作用更加直观,但是也会出现新的问题,比如子进程的资源回收.释放.托管等,处理不好,便会成为可怕的僵尸进程 ● 本文主要讨论 ...

  2. LeetCode 70. Climbing Stairs爬楼梯 (C++)

    题目: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cl ...

  3. Day Six

    站立式会议 站立式会议内容总结 442 今天:实现计划界面的逻辑 遇到的问题:模态框问题 明天:解决上面问题,开始使用动态数据 331 今天:点击添加找到文件 遇到问题:找到文件在app的引入实现 明 ...

  4. 在ubuntu下运行python脚本

    转自http://www.cnblogs.com/hester/p/5575658.html 1. 运行方式一 新建test.py文件: 1 touch test.py 然后vim test.py打开 ...

  5. 【补】debug

    懒得翻别人博客了,之前的按钮不显示名字,应该是文字ui文件名写错了. 现在不存在任何已知bug.

  6. delphi clientdataset判断某一行值是否存在

    ClientDataSet的数据查找.我所介绍的心得和技巧都是用ClientDataSet来做范例,也可以应用于其他的一些DataSet.废话就不多说了.我们还是先看代码,让后再总结.1.Scanni ...

  7. Nginx 配置遇到问题

    1 connect() to 10.2.20.170:1009 failed (13: Permission denied) while connecting to upstream 现这个错误是因为 ...

  8. myeclipse运行错误

    错误出现为: !MESSAGE Product com.genuitec.myeclipse.product.ide could not be found. 这是在我将其它电脑上的myeclipse拷 ...

  9. Minimum Sum LCM UVA - 10791(分解质因子)

    对于一个数n 设它有两个不是互质的因子a和b   即lcm(a,b) = n 且gcd为a和b的最大公约数 则n = a/gcd * b: 因为a/gcd 与 b 的最大公约数也是n 且 a/gcd ...

  10. 一台机子同时启动两个相同版本的tomcat

    其实我的机子之前是可以同时启动两个tomcat的,但是是两个不同版本的tomcat,一个是6.0,一个是7.0,我的环境变量都没有设置,所以我对解压过的tomcat唯一改动的就是在catalina.b ...