PHP设计模式之单例模式与工厂模式

设计模式不是一套具体的语言框架,而是一种行之有效的编码规范,是前人经过反复使用并总结出来的编写代码的经验。使用设计模式的目的是为了提高代码可重用性,让代码更容易被他人理解,同时保证代码可靠性。合理使用设计模式有助于我们更加深入地理解面向对象思维。

创新互联是一家集网站建设,曲阳企业网站建设,曲阳品牌网站建设,网站定制,曲阳网站建设报价,网络营销,网络优化,曲阳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

其实,大家在编码的过程中肯定也用到了一些与这些设计模式类似的编码方法,只是不知道这些方法可以被抽象到“模式”这么一个高度。

本节我们就来简单地了解一下在 php 编码过程中经常会用到的一些设计模式。

1、工厂模式

工厂模式是一种专门用来创建其它对象的类(称为“工厂类”),根据传递参数的不同,来创建不同类的对象。我们可以使用工厂类创建对象,而不是直接使用 new。

工厂类中至少有一个公共的静态方法(称为“工厂方法”),静态方法接受一个参数,根据这个参数来创建不同类的对象。

【示例】定义加、减、乘、除四个类,并通过工厂类调用它们。

getMessage();
            }
        }
    }

    // 工程类,主要用来创建对象
    // 功能:根据输入的运算符号,工厂就能实例化出合适的对象
    class Factory {
        public static function createObj($operate){
            switch ($operate){
                case '+':
                    return new Add();
                    break;
                case '-':
                    return new Sub();
                    break;
                case '*':
                    return new Mul();
                    break;
                case '/':
                    return new Div();
                    break;
            }
        }
    }
    $test   = Factory::createObj('/');
    $result = $test->getValue(23,3);
    echo $result;
?>

运行结果如下:

7.6666666666667

2、单例模式

单例模式也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,可以确保一个类只能创建一个对象,这么做可以极大节省内存空间,有利于我们协调系统的整体行为。

使用单例模式创建的类(“单例类”)不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

单例模式一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的 new 操作,因为每一次 new 操作都会消耗系统和内存的资源。

实现单例模式的思路(三私一公):

  • 私有的静态的对象实例;
  • 私有的构造方法,在类外不能使用 new 创建对象;
  • 私有的克隆方法,在类外不能使用 clone 克隆对象;
  • 公共的静态的创建对象实例的方法。

【示例】使用单例模式创建一个数据库连接类。

运行结果如下:

object(Mysql)#1 (0) {
}
object(Mysql)#1 (0) {
}
object(Mysql)#1 (0) {
}

通过运行结果可以看出,我们多次调用 getInstance() 方法并没有创建多个对象,所以说使用单例模式可以保证一个类只能创建一个对象,不能创建第二个对象。

文章标题:PHP设计模式之单例模式与工厂模式
浏览地址:http://www.mswzjz.com/qtweb/news2/172852.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联