PHP设计模式(一)
1)工厂模式
工厂模式是用工厂方法生成对象,而不是直接new一个对象。假设我们在Config命名空间下有一个名叫Db的数据库操作类,用普通的方法,如果我们想去创建一个Db的对象,我们会直接new一个出来。
$db = new \Config\Db();
工厂模式就是用一个工厂方法替换掉直接new一个对象的操作,以后想创建对象就调用这个工厂方法。
<?php
namespace Config;
class Factory{
static public function createDb(){
$db = new Db();
return $db;
}
}
$db = \Config\Factory::createDb();
工厂模式有什么好处呢, 我们的项目中多处都对Db类进行了new的操作,如果这个类发生了一些更改,比如说类名或者是参数的改变,没用工厂模式的话我们就需要进行多处更改,而工厂模式只需要改这个工厂类就行了。
2)单例模式
单例模式使某个类的对象仅能创建一次,通常一个项目中会多次用的Db这个数据库连接类,如果在每个地方都调用工厂方法创建一个数据库连接类,这样是比较消耗资源的,我们只需要一个数据库连接,单例模式就是来解决这个问题的。
我们打开Db类,首先把构造方法设置为私有的,这样就禁止了在其他地方直接new我们的Db类
<?php
namespace Config;
class Db{
static protected $db;
private function __construct(){
}
static public function getInstance(){
//条件判断Db类是否已经new过
if (self::$db) {
return self::$db;
} else {
//构造方法被设置为了私有的,外部不能直接new,但自己内部可以new
self::$db = new self();
return self::$db;
}
}
//下面省略一系列操作数据库的方法
}
Db类的构造方法设置为了私有的,那我们在工厂类中也不能直接new了,现在来修改我们的工厂类
<?php
namespace Config;
class Factory{
static public function createDb(){
$db = Db::getInstance;
return $db;
}
}
现在不管我们调用多少次工厂方法,我们的数据库连接都只会被创建一次。
3)注册树模式
注册树模式可以把我们的对象放在全局的树上,让对象可以全局共享
下面我们来编写一个注册树的类,包含set,get,_unset三个操作。
<?php
namespace Config;
class Register{
protected static $objects;
static public function set($alias,$object){
self::$objedts[$alias] = $object;
}
static public function get($name){
return self::$objedts[$name];
}
//unset是php中的关键词,所以起名为_unset
static public function _unset($alias){
unset(self::$objedts[$alias]);
}
}
下面我们再把工厂方法改一下
<?php
namespace Config;
class Factory{
static public function createDb(){
$db = Db::getInstance;
//把单例模式生成的对象放在注册树上
Register::set('db',$db);
}
}
现在这个工厂方法只需要调用一次,以后再需要使用数据库连接对象,直接从全局的注册树上拿就行了
$db = Register::get("db");
至于这个工厂方法是么时候调用,可以在程序初始化的时候,我们的业务逻辑代码只需要在注册树上把这个对象读取出来即可。至此,三种最基本的设计模式就介绍完了。
PHP设计模式(一)的更多相关文章
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- java EE设计模式简介
1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...
- 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式
上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...
- 《JavaScript设计模式 张》整理
最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...
- 《JavaScript设计模式与开发实践》整理
最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...
- 设计模式之行为类模式大PK
行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...
- .NET设计模式访问者模式
一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- java 设计模式
目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...
- 设计模式之单例模式(Singleton)
设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...
随机推荐
- Redis(一):数据结构与对象
前言 本书是Redis设计与实现的读书笔记,旨在对Redis底层的数据结构及实现有一定了解.本书所有的代码基于Redis 3.0. 简单动态字符串 SDS Redis没有直接使用C语言中的字符串,而是 ...
- 人工智能与VR结合:带来体验多样性
人工智能服务--微软认知服务(Microsoft Cognitive Services)最初包括视觉.语音.语言.知识和搜索五大类共 21 项 API.应用了这些 API 的系统能看.能听.能说话,并 ...
- ASP.NET Core WebApi(01)项目建立
前言:前一段时间学习了ASP.NET Core,决定写个简单的项目,旨在消化所学内容,并记录过程中遇到的问题.本章是第一篇,内容为项目的建立 一.准备工作 安装Visual Studio时,默认会安装 ...
- codeforce 227D Naughty Stone Piles (贪心+递归+递推)
Description There are n piles of stones of sizes a1, a2, -, an lying on the table in front of you. D ...
- Linux 上搭建 Snort+BASE 入侵检测系统
配置实验环境 由于本人电脑的存储空间不足,无法再承担安装一个虚拟机的开销,因此在阿里云上申请了一个云服务器进行本次实验.服务器配置如下: 1 核 - 2GB 内存 - 40GB 系统盘 操作系统:Ub ...
- 【网络基础】ARP地址解析协议
ARP(Address Rssolution Protocol) 地址解析协议 用于将IP地址解析为MAC地址. MAC地址是设备的物理地址,是被分配给每一个网络接口卡的全球唯一序号. 全球唯一:理论 ...
- libevent(九)bufferevent
bufferevent,带buffer的event struct bufferevent { struct event_base *ev_base; const struct bufferevent_ ...
- restful 架构风格的curd(增删改查)
restful架构 概念:REST指的是一组架构约束条件和原则,如果一个架构符合REST的约束条件和原则,就称之为RESTful架构. restful不是一个专门的技术,他是一个规范.规范就是写写代码 ...
- 【大数据 Spark】利用电影观看记录数据,进行电影推荐
利用电影观看记录数据,进行电影推荐. 目录 利用电影观看记录数据,进行电影推荐. 准备 1.任务描述: 2.数据下载 3.部分数据展示 实操 1.设置输入输出路径 2.配置spark 3.读取Rati ...
- 【Spark】DataFrame关于数据常用操作
文章目录 DSL语法 概述 实例操作 SQL语法 概述 实例操作 DSL语法 概述 1.查看全表数据 -- DataFrame.show 2.查看部分字段数据(有4种方法) (1) DataFram ...