10

Learning PHP Design Patterns.设计模式的宗旨就是重用,应用设计模式可以使我们的代码更加优雅、简洁、低耦合。

一、单例模式

1.什么是单例模式:

一个类最多只能产生一个对象,如果希望在系统中某个类(链接数据库的类)的对象只能存在一个,单例模式是最好的解决方案。

2.单利模式的实现:三私一公

①私有化构造方法:防止实例化
②私有化克隆方法:防止克隆
③私有化静态属性:保存对象
④私有化静态方法:获取对象

3.代码实现

class Singleton{
    private static $obj;//私有化静态属性
    private function __construct(){
        //私有化构造方法
    }
    private function __clone(){
        //私有化克隆方法
    }
    //静态方法产生对象
    static public function getInstance(){
        //对象不存在new一个对象
        if(!is_object(self::$obj)){
            self::$obj = new Singleton();
        }
        return self::$obj;
    }
}

4.测试单例模式

//无法实例化,可以防止new实例化这个类,强制使用getInstance方法,创建对象
$obj1 = new Singleton;
var_dump($obj1);
//成功获取对象
$obj2 = Singleton::getInstance();
var_dump($obj2);
//无法克隆
$obj3 = clone $obj2;
var_dump($obj3);

二、工厂模式

这也是一个很基本,很简单,很常用的设计模式。

本来我们要获取一个类的实例,需要用到new关键字。但是如果new 直接写到业务代码里,一个类在很多地方都实例化过,以后要是这个类出了什么问题,比如要改个名字(实际中,你更多的可能是修改构造函数方法),那么就尴尬了,需要改很多地方。

工厂模式,顾名思义,就是不用new来获得实例,而是把业务类放进一个工场类里,由工厂(类)『生产』出对应的实例

实现

SimpleFactory.php

<?php
namespace DesignPatterns\Creational\SimpleFactory;
class SimpleFactory
{
    public function createBicycle(): Bicycle
    {
        return new Bicycle();
    }
}

Bicycle.php

<?php
namespace DesignPatterns\Creational\SimpleFactory;
class Bicycle
{
    public function driveTo(string $destination)
    {
    }
}

使用

$factory = new SimpleFactory();
 $bicycle = $factory->createBicycle();
 $bicycle->driveTo('Paris');

我们需要什么样的实例,就到工厂的实例方法里去拿。这里只定义了一个类的实例,你可以定义更多。

我们看到,业务代码里没有出现 new以及那个具体的业务类, 这样 业务类(class Bicycle)我们可以随便改,以后更新的时候只要在工厂类(class SimpleFactory)里修改一次,就可以一对多的在各处生效了。

但是,这个方法名字 $factory->createBicycle(); 你得起好,如果你要改这个名字,还是得到多个地方改的。
工厂的作用,简而言之,就是在工厂里边创建业务需要的实例对象,然后,在业务层创建工厂对象调用里边相关的创建对象方法即可。

总结

  1. 工厂类必须有一个工厂方法;

  2. 工厂方法必须能够返回一个其他类的实例;

  3. 一次只能创建和返回一个实例;

三、PHP设计模式汇总

PHP设计模式汇总

相关文章:
php设计模式之单例模式
TIGERB的:一个php技术栈后端猿的知识储备大纲
php 设计模式之工厂模式、单例模式、注册树模式


Corwien
6.3k 声望1.6k 粉丝

为者常成,行者常至。


« 上一篇
Mysql用法汇总
下一篇 »
Linux学习笔记