PHP常用设计模式
1、单例模式指在整个应用中只有一个对象实例的设计模式
class Single {
public $rand;
static private $instance; // 类直接调用
final private function __construct() { // private防止外部new
$this->rand = mt_rand(1, 100);
}
static public function getInstance() {
if (!self::$instance) { // 判断$instance是否赋值
self::$instance = new self;
}
return self::$instance;
}
}
$obj1 = Single::getInstance();
$obj2 = Single::getInstance();
var_dump($obj1 === $obj2); // true
2、工厂模式指通过工厂类调用自身静态方法来生产对象实例的设计模式
//接单例模式代码
class FactoryClass {
static public function factory() {
return Single::getInstance();
}
}
var_dump(FactoryClass::factory());
3、注册器模式指将对象注册到全局树上,可直接设置获取注销对象
class Register {
static protected $objects; //全局树array
static public function set($alias, $object) {
self::$objects[$alias] = $object; //设置
}
static public function get($alias) {
return self::$objects[$alias]; //获取
}
static public function _unset($alias) {
unset(self::$objects[$alias]); //注销
}
}
Register::set('rand', FactoryClass::factory()); //设置别名为rand的对象
var_dump(Register::get('rand')); //获取别名为rand的对象
Register::_unset('rand'); //销毁别名为rand的对象
var_dump(Register::get('rand')); //Notice: Undefined index: rand
4、适配器模式指将一个类的接口转换成客户期望的另一个类的接口,让原本接口不兼容的类合作无间。
适配器分为类适配器和对象适配器,类适配器采用“多继承”的实现方式,导致不良的高耦合,对象适配器采用“对象组合”的方式,更符合松耦合精神。
4.1 类适配器
//类适配器使用的是继承
/**
* 目标
*/
interface Target {
public function method1(); //源类也有的方法1
public function method2(); //源类没有的方法2
} /**
* 源
*/
class Source {
public function method1() {
echo '我是源类含有的方法一 <br>';
}
} /**
* 类适配器
*/
class Adapter extends Source implements Target {
public function method2() {
echo '我是适配器补充的方法二 <br>';
}
} /**
* 客户端
*/
class Client {
static public function main() {
$adapter = new Adapter();
$adapter->method1();
$adapter->method2();
}
}
Client::main();
4.2 对象适配器
//类适配器使用的是继承
/**
* 目标
*/
interface Target {
public function method1(); //源类也有的方法1
public function method2(); //源类没有的方法2
} /**
* 源
*/
class Source {
public function method1() {
echo '我是源类含有的方法一 <br>';
}
} /**
* 类适配器
*/
class Adapter implements Target {
private $_source;
public function __construct(Source $source) {
$this->_source = $source;
}
public function method1() { //委派调用source的method1方法
$this->_source->method1();
}
public function method2() { //补充source中没有的method2方法
echo '我是适配器补充的方法二';
}
}
class Client {
static public function main() {
$adapter = new Adapter(new Source);
$adapter->method1();
$adapter->method2();
}
}
Client::main();
//我是源类含有的方法一
//我是适配器补充的方法二
5、观察者模式指当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。
/**
* 主题接口
*/
interface Subject {
public function register(Observer $observer); //注册对象方法
public function notify(); //通知方法
}
/**
* 观察者接口
*/
interface Observer {
public function update();
}
/**
* 执行类
*/
class Action implements Subject {
private $_observers = array();
public function register(Observer $observer) {
$this->_observers[] = $observer; //对象写入
}
public function notify() {
foreach ($this->_observers as $observer) { //遍历对象
$observer->update();
}
}
}
/**
* 观察者
*/
class Man implements Observer {
public function update() {
echo 'man观察者<br>';
}
}
class Woman implements Observer {
public function update() {
echo 'woman观察者';
}
}
$action = new Action();
$action->register(new Man);
$action->register(new Woman);
$action->notify();
PHP常用设计模式的更多相关文章
- Android常用设计模式(二)
Android常用设计模式之观察者模式 观察者设计模式在Android应用中会经常用到,模式原理类似于这样的场景: 用户订报纸,然后在报社登记,报社来统计用户(添加用户),用户也可以取消订阅,报社删除 ...
- 代码重构 & 常用设计模式
代码重构 重构目的 相同的代码最好只出现一次 主次方法 主方法 只包含实现完整逻辑的子方法 思维清楚,便于阅读 次方法 实现具体逻辑功能 测试通过后,后续几乎不用维护 重构的步骤 1 新建一个方法 ...
- IOS开发常用设计模式
IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们 ...
- python之路,Day24 常用设计模式学习
python之路,Day24 常用设计模式学习 本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 ...
- java常用设计模式总览
一.java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组 ...
- javaEE Design Patter(1)初步了解23种常用设计模式
设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. ...
- PHP 进阶篇:面向对象的设计原则,自动加载类,类型提示,traits,命名空间,spl的使用,反射的使用,php常用设计模式 (麦子学员 第三阶段)
以下是进阶篇的内容:面向对象的设计原则,自动加载类,类型提示,traits,命名空间,spl的使用,反射的使用,php常用设计模式 ================================== ...
- C++源码实现:21种常用设计模式
C++源码实现:21种常用设计模式一直以来在设计模式的学习中,都是出现java的源码,这对学习C++的极度不友好.本工程是基于C++实现21种常用的设计模式,里面包含了实例代码和示例.编写的时候在学习 ...
- 23种常用设计模式的UML类图
23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源码)与<设计模式:可复用面向对象软件的基础>(源码)两书中介绍的设计模式与UML图. 整 ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
随机推荐
- 基础知识点 关于 prototype __proto__
基础知识点 关于 prototype __proto__ 供js新手参考 JavaScript 的一些基础知识点: 在 JavaScript 中,所有对象 o 都拥有一个隐藏的原型对象(在 Fire ...
- PHP删除数组中空值
array_filter 函数的功能是利用回调函数来对数组进行过滤,一直都以为用回调函数才能处理, 却没有发现手册下面还有一句,如果没有回调函数,那么默认就是删除数组中值为false的项目 代码: ...
- Java 学习札记(一)JDK安装配置
Windows上配置JDK 1.下载windows版JDK 网址:http://www.oracle.com/technetwork/java/javase/archive-139210.html 2 ...
- arm GIC介绍之四【转】
转自:https://blog.csdn.net/sunsissy/article/details/73882718 GIC是ARM体系中重要的组件,在认识到GIC的组成和功能之后,了解到IRQ的大致 ...
- 安装.NET Framework返回1603错误的解决办法
昨天正在忙其它事情,实然同事向我反馈TFS上的文档无法浏览查看.第一反映是他的机器环境问题,让他试了下其它项目的文档也无法查看,后来在我电脑上也尝试了一下,果然无法查看项目文档,看来是TFS出了问题. ...
- orm 缺点
背景 提起orm,在我开发这几年可是阴魂不散,因为我的开发没人带,全是自己琢磨,好处是很多东西都懂,都理解的透彻,缺点是见得少,接触少.而我一直没用orm,但是又到处听说orm,但我总想不明白有啥用处 ...
- sublime text 3 使用简介
2014年1月22日 09:47:50 2用了一段时间感觉不错,就是自带的高亮显示匹配标签或者代码块儿时有点儿不清楚,所以一直是sublime 开PHP,notepad++开html 现在想只用一个编 ...
- highchart 横轴纵轴数据
1.highchart 横轴为字符串数组,必须加引号:纵轴为数值数组,不能加引号2.series中的json内容,属性不能加引号3.chart.height: Number,图表的高度.默认高度是根据 ...
- java 标准异常
一.Throwable这个Java类被用来表示任何可以作为异常被抛出的类.Throwable对象可分为两种类型(从Throwable继承而得到的类型): 1.) Error用来表示编译时和系统错误 2 ...
- 神奇的Content-Type--在JSON中玩转XXE攻击
转自:360安全播报http://bobao.360.cn/learning/detail/360.html 大家都知道,许多WEB和移动应用都依赖于Client-Server的WEB通信交互服务.而 ...