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 个常见的模式 本文的 ...
随机推荐
- dede调用多级导航的方法
<div id="navWrapper"> <div class="content"> <ul class="nav m ...
- Mysql select id 加上order by 后结果不一致
测试数据将近280万 1.SELECT id FROM cbbd ORDER BY id LIMIT 900000,10 2.SELECT id FROM cbbd LIMIT 900000,10 ...
- J2EE简介
一,J2EE概念: J2EE的全称为,Java2 Platform Enterprise Edition,Java或java2平台企业版,他是基于java平台或java2平台的标准版,保留并扩展了J2 ...
- Kali社会工程学攻击--powershell 攻击(无视防火墙)
1.打开setoolkit 输入我们反弹shell的地址与端口 2.修改我的shellcode 3.攻击成功
- Python常用time处理
#coding=utf-8 # python2.7工具语句 from sys import version_info import time import datetime if version_in ...
- java虚拟机规范(se8)——java虚拟机结构(四)
2.7 对象的表示 java虚拟机并不要求对象满足任何特定的内部结构. 在Oracle的一些Java虚拟机实现中,对类实例的引用是指向句柄的指针,该句柄本身是一对指针:一个指向包含对象方法的表和指向表 ...
- 关于NotificationListenerService监听时有失败的处理
关于NotificationListenerService监听时有失败的处理 问题由来 去年进入一家专业做智能穿戴设备的公司,在项目中需要监听系统通知栏变化(主要是IM类app的信息获取到后推送到用户 ...
- HTML5+ App开发入门
HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实 ...
- WebStrom配置node.js
Webstrom的注册码: WebStorm 7.0.1注册码 user name:newasp 注册码: ===== LICENSE BEGIN ===== 16417-12042010 00001 ...
- Java编程的逻辑 (68) - 线程的基本协作机制 (下)
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...