php期末设计总结,PHP设计模式总结

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

namespace DesignPatterns\Creational\SimpleFactory;

class SimpleFactory

{

public function createBicycle(): Bicycle

{

return new Bicycle();

}

}

Bicycle.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();你得起好,如果你要改这个名字,还是得到多个地方改的。

工厂的作用,简而言之,就是在工厂里边创建业务需要的实例对象,然后,在业务层创建工厂对象调用里边相关的创建对象方法即可。

总结

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

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

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

三、PHP设计模式汇总

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值