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. CentOS 6.8 安装Tomcat7

    一.下载Tomcat到服务器上 将Tomcat包下载到devleoper(没有此目录创建一个)目录下: 二.解压安装包 下载好之后,直接解压,使用命令: .tar.gz # 是否使用sudo权限执行根 ...

  2. 微软职位内部推荐-Senior Software Engineer_HPC

    微软近期Open的职位: Job Title: Senior Software Engineer_HPC Location: Shanghai, China Are you passionate ab ...

  3. PAT甲题题解-1124. Raffle for Weibo Followers-模拟,水题

    水题一个,贴个代码吧. #include <iostream> #include <cstdio> #include <algorithm> #include &l ...

  4. vue.js指令总结

    1.v-html 用于输出真正html,而不是纯文本. 2.v-text 输出纯文本. <!DOCTYPE html> <html lang="en"> & ...

  5. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  6. java计算器实验报告

    一.实验目的 1.熟悉java图形用户界面的设计原理和程序结构 2.能设计复核问题要求的图形用户界面程序 3.熟悉java awt和swing的组合 4.掌握常用组建的事件借口 5.会应用awt和sw ...

  7. SE Springer小组《Spring音乐播放器》软件需求说明之四

    4 运行环境规定 4.1设备 我们计划完成的音乐软件较小巧,功能并不复杂,在普通笔记本电脑中即可运行,并无特殊硬设备要求. 4.2支持软件 需要用到windows操作系统,用VS编写C/C++代码,还 ...

  8. Leetcode题库——49.字母异位词分组【##】

    @author: ZZQ @software: PyCharm @file: leetcode49_groupAnagrams.py @time: 2018/11/19 13:18 要求:给定一个字符 ...

  9. C++中清空缓冲区

    C++中标准输入cin有多种输入方式.. 这篇文章罗列的还是简要易懂的.C++输入cin详解...如果只是简单的使用cin>>的话,会单个token的读入.但是会忽略换行符,空格,制表符等 ...

  10. Winform设置开机启动-操作注册表

    #region 设置开机运行 /// <summary> /// 设置开机运行 /// </summary> /// <param name="R_startP ...