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设计模式汇总

php期末设计总结,PHP设计模式总结相关推荐

  1. python通用权限管理框架图_通用权限管理设计篇_设计模式

    摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/  一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完 ...

  2. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...

  3. wordvba编程代码大全_面向对象、设计原则、设计模式、编程规范、重构

    面向对象.设计原则.设计模式.编程规范.重构 面向对象 主流的三个编程风格有:面向对象,面向过程,函数式编程. 面向对象是最主流的风格,面向对象具有丰富的特性(封装,抽象,继承,多态). 面向对象 面 ...

  4. C#软件设计——小话设计模式原则之:接口隔离原则ISP

    前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...

  5. mysql的设计模式_数据库设计中使用设计模式

    一.引言 现代的企业开发中,越来越多地引入了多层架构设计模式,即使是小型的企业信息系统也逐渐向多层架构发展,以满足系统的可伸缩性以及可维护性.目前企业开发的平台占主导地位的是 J2EE 和 .NET ...

  6. 面向对象编程,设计原则,设计模式

    2019独角兽企业重金招聘Python工程师标准>>> 面向对象编程,设计原则,设计模式 面向对象编程 面向对象编程与面向过程编程的区别 面向对象软件开发的优点 面向对象编程语言 C ...

  7. 类设计原则及设计模式(一篇就够)

    类设计原则及设计模式 类设计的六大原则 设计模式定义 设计模式的分类 创建型模式 1. 简单工厂和工厂方法模式 定义和分类 2. 抽象工厂模式 3. 单例模式 定义 优缺点 饿汉式单例与懒汉式单例类比 ...

  8. Python、设计原则和设计模式-创建类设计模式

    Python.设计原则和设计模式 前言 程序的目标:高内聚 低耦合 有哪些设计原则 设计原则是「高内聚.低耦合」的具体落地. 单一职责原则要求在软件系统开发.设计中,一个类只负责一个功能领域的相关职责 ...

  9. 通用权限管理设计篇_设计模式

    摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/  一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完 ...

最新文章

  1. 生成删除约束语句 SQL语句
  2. mysql的代码大全_MySql数目字函数大全
  3. 百度面试测试开发工程师内容
  4. Cannot check for MySQL Daemon startup because of mysqladmin failure
  5. Vue cli3.0创建Vue项目
  6. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令
  7. 机器人走进开放源代码
  8. sqlite数据库基础学习
  9. ubuntu安装包常用下载地址
  10. 误差修正ECM模型怎么分析?
  11. 发现新世界:神级浏览器插件TamperMonkey(暴力猴)
  12. honeyd蜜罐简易部署——ubuntu
  13. redis是干什么的
  14. 【BZOJ3717】[PA2014]Pakowanie 状压DP
  15. 阿帕拉契州立大学代表团访问AURAK
  16. Window7使用虚拟桌面
  17. OA系统实施:理清OA需求很关键
  18. 【DB笔试面试764】在Oracle中,逻辑DG维护中常用到的SQL语句有哪些?
  19. python在电力系统中的应用_SKIDL: 在PYTHON中描述你的电路
  20. 【学习日志】2023.04.24 C++ 调整黑点、白点和中值以增加、平衡或降低对比度

热门文章

  1. VVC帧间预测(二)Merge mode with MVD (MMVD)
  2. Android制作天气预报软件 —— 天气查询
  3. 时隔一个月,讯飞星火大模型 V1.5 发布:星火 APP 登场,综合能力三大升级!
  4. checkmarx 8
  5. [AutoHotkey]mytimer.ahk
  6. 测试员薪资两极分化,如何成为年薪百万的阿里测开?
  7. MD5 c++ 实现
  8. java pinyin4j_java实现中文汉字转拼音 Pinyin4j的基本用法
  9. 3.Linux创建文件
  10. 如何设计推荐系统架构?