• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP实战之设计模式【翻译】

php 搞代码 3年前 (2022-01-23) 18次浏览 已收录 0个评论
文章目录[隐藏]

??> 原文地址:

Design Patterns in PHP

本文主要讨论下Web开发中,准确而言,是PHP开发中的相关的设计模式及其应用。有经验的开发者肯定对于设计模式非常熟悉,但是本文主要是针对那些初级的开发者。首先我们要搞清楚到底什么是设计模式,设计模式并不是一种用来解释的模式,它们并不是像链表那样的常见的数据结构,也不是某种特殊的应用或者框架设计。事实上,设计模式的解释如下:

descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.

另一方面,设计模式提供了一种广泛的可重用的方式来解决我们日常编程中常常遇见的问题。设计模式并不一定就是一个类库或者第三方框架,它们更多的表现为一种思想并且广泛地应用在系统中。它们也表现为一种模式或者模板,可以在多个不同的场景下用于解决问题。设计模式可以用于加速开发,并且将很多大的想法或者设计以一种简单地方式实现。当然,虽然设计模式在开发中很有作用,但是千万要避免在不适当的场景误用它们。

目前常见的设计模式主要有23种,根据使用目标的不同可以分为以下三大类:

  • 创建模式:用于创建对象从而将某个对象从实现中解耦合。

  • 架构模式:用于在不同的对象之间构造大的对象结构。

  • 行为模式:用于在不同的对象之间管理算法、关系以及职责。

Creational Patterns

Singleton(单例模式)

单例模式是最常见的模式之一,在Web应用的开发中,常常用于允许在运行时为某个特定的类创建一个可访问的实例。

<?php/** * Singleton class */final class Product{    /**     * @var self     */    private static $instance;    /**     * @var mixed     */    public $mix;    /**     * Return self instance     *     * @return self     */    public static function getInstance() {        if (!(self::$instance instanceof self)) {            self::$instance = new self();        }        return self::$instance;    }    private function __construct() {    }    private function __clone() {    }}$firstProduct = Product::getInstance();$secondProduct = Product::getInstance();$firstProduct->mix = 'test';$secondProduct->mix = 'example';print_r($firstProduct->mix);// exampleprint_r($secondProduct->mix);// example

在很多情况下,需要为系统中的多个类创建单例的构造方式,这样,可以建立一个通用的抽象父工厂方法:

<?phpabstract class FactoryAbstract {    protected static $instances = array();    public static function getInstance() {        $className = static::getClassName();        if (!(self::$instances[$className] instanceof $className)) {            self::$instances[$className] = new $className();        }        return self::$instances[$className];    }    public static function removeInstance() {<i style="color:transparent">本#文来源gaodai$ma#com搞$$代**码网$</i><button>搞代gaodaima码</button>        $className = static::getClassName();        if (array_key_exists($className, self::$instances)) {            unset(self::$instances[$className]);        }    }    final protected static function getClassName() {        return get_called_class();    }    protected function __construct() { }    final protected function __clone() { }}abstract class Factory extends FactoryAbstract {    final public static function getInstance() {        return parent::getInstance();    }    final public static function removeInstance() {        parent::removeInstance();    }}// using:class FirstProduct extends Factory {    public $a = [];}class SecondProduct extends FirstProduct {}FirstProduct::getInstance()->a[] = 1;SecondProduct::getInstance()->a[] = 2;FirstProduct::getInstance()->a[] = 3;SecondProduct::getInstance()->a[] = 4;print_r(FirstProduct::getInstance()->a);// array(1, 3)print_r(SecondProduct::getInstance()->a);// array(2, 4)

Registry


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP实战之设计模式【翻译】

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址