[{"data":1,"prerenderedAt":65},["ShallowReactive",2],{"article-26":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":16,"status":17,"is_open":17,"is_deleted":14,"is_top":14,"is_recommend":14,"create_time":18,"update_time":19,"image_id":20,"url":13,"member_id":14,"cate_name":21,"prev":22,"next":25,"tags":28,"words":36,"read_time":37,"comments":14,"cover":38,"relevant":39},26,"PHP设计模式之基础设计模式","php,设计模式"," 学习设计模式，并应用到实际工作中，",2,"##### 一、工厂模式\n\n属于类创建型模式，在简单工厂模式中，可以根据参数的不同返回不同类的实例，简单工厂模式专门定义一个类来负责创建其他类的实例，\n\n被创建的实例通常都具有共同的父类。\n\n代码实例：\n```php\nclass Cat{\n    function __construct(){\n       echo \"I am Cat class \";\n    }\n}\nclass Dog{\n    function __construct(){\n        echo \"I am Dog class \";\n    }\n}\n\nclass Factory{\n    public static function CreateObject($name){\n        if ($name == 'cat') {\n            return new Cat();\n        }elseif ($name == 'dog') {\n            return new Dog();\n        }\n    }\n}\n$cat = Factory::CreateObjectl('cat');\n$dog = Factory::CreateObject('dog');\n```\n优点：实现对象的创建和对象使用的分离，将对象的创建交给专门的工厂类负责；一旦发生变更，只需要在工厂类里面修改即可，而不用一个一个的去修改。\n\n缺点：工厂类不够灵活，增加新的具体产品需要修改工厂类的判断逻辑代码，产品较多时。工厂方法代码非常复杂。\n\n##### 二、单例模式\n\n是一种常用的软件设计模式。在应用这个模式时，单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象，\n\n这样有利于我们协调系统整体的行为。防止对象多次连接，造成资源浪费。\n\n示例代码：\n\n```php\nclass DataBase{\n    private static $instance;\n    private function __construct(){}\u002F\u002F私有构造方法 禁止使用new创建对象\n    public static function getInstance(){\n   if (!isset(self::$instance)) {\n       self::$instance = new self;\n   }\n        return self::$instance;\n    }\n    private  function __clone(){}\u002F\u002F将克隆方法设为私有，禁止克隆对象\n    public function say(){\n        echo \"这是用单例模式创建对象实例 \";\n    }\n    public function operation(){\n        echo \"这里可以添加其他方法和操作 \";\n    }\n}\n$db = DataBase::getInstance();\n$db->say();\n$db->operation();\n```\n##### 三、注册器模式\n\n已经创建好对象后，下次使用直接取，将一些对象注册到全局树上面，可以用来在任何地方被访问。一般只提供一个set 和 unset 两种方法，\n\n需要一个静态的非公开属性和一个取得静态属性的静态方法.\n\n实例代码：\n\n```php\nclass Register {\u002F\u002F注册器模式\n    protected static $object;\n    public static function set($alias, $object){\n        self::$object[$alias] = $object;\n    }\n    public static function get($alias){\n        return self::$object[$alias];\n    }\n    public static function _unset($alias){\n        unset(self::$object[$alias]);\n    }\n}\nclass Factory{\u002F\u002F工厂模式\n    public static function createObject(){\n   $db = DataBase::getInstance();\n   Register::set('db', $db);\n    }\n}\nclass DataBase{\u002F\u002F单例模式\n    protected static $instance;\n    public static function getInstance(){\n   if (!isset(self::$instance)) {\n       self::$instance = new self;\n   }\n   return self::$instance;\n    }\n    public function say(){\n        echo \"这是用单例模式创建对象实例 \";\n    }\n}\n$db = Factory::createObject();\n$obj = Register::get('db');\n$obj->say();\n```",null,0,613,"",1,"2019-01-17 23:00:25","2026-04-19 15:15:15",135,"PHP",{"id":23,"title":24},25,"JavaScript自定义滚动条",{"id":26,"title":27},27,"PHP设计模式之适配、策略以及数据对象映射模式",[29,30,33],{"id":23,"name":21},{"id":31,"name":32},47,"设计模式",{"id":34,"name":35},48,"后端",1407,3,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002Fc5\u002F22a0e715e916985d7738d131d3b31b.jpg",[40,45,50,55,60],{"id":41,"title":42,"create_time":43,"description":44},93,"PHP执行Python脚本解压，压缩文件夹操作","2020-08-06 14:59:05","PHP是有解压缩类文件的，但在实际项目中，用户方使用Python脚本压缩，很容易出现中文解压乱码，导致文件内容丢失的情况，本文主要介绍PHP执行Python脚本解压缩出现的问题以及解决方法",{"id":46,"title":47,"create_time":48,"description":49},92,"PHP对图片的处理","2020-07-30 15:53:38","图片处理函数功能：缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色处理并保存历史记录的思路：当有图片有改动时自动生成一张新图片",{"id":51,"title":52,"create_time":53,"description":54},96,"PHP中字符串跟0做比较永远是true","2021-02-04 16:16:27","最近在项目中做数据对比的功能，发现一个特殊的情况，0跟任何字符串做比较永远返回true，特意了解了一下。",{"id":56,"title":57,"create_time":58,"description":59},13,"Win系统下配置PHP链接Oracle","2019-01-17 22:23:36","该文章内容主要介绍window系统下，php连接oracle的配置。",{"id":61,"title":62,"create_time":63,"description":64},103,"面向对象三大特性五大原则 + 低耦合高内聚[转载]","2021-10-31 23:18:58","面向对象的三大特性是\"封装、\"多态\"、\"继承\"，五大原则是\"单一职责原则\"、\"开放封闭原则\"、\"里氏替换原则\"、\"依赖倒置原则\"、\"接口分离原则\"。",1783431669605]