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设计模式汇总
php期末设计总结,PHP设计模式总结相关推荐
- python通用权限管理框架图_通用权限管理设计篇_设计模式
摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/ 一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完 ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...
- wordvba编程代码大全_面向对象、设计原则、设计模式、编程规范、重构
面向对象.设计原则.设计模式.编程规范.重构 面向对象 主流的三个编程风格有:面向对象,面向过程,函数式编程. 面向对象是最主流的风格,面向对象具有丰富的特性(封装,抽象,继承,多态). 面向对象 面 ...
- C#软件设计——小话设计模式原则之:接口隔离原则ISP
前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...
- mysql的设计模式_数据库设计中使用设计模式
一.引言 现代的企业开发中,越来越多地引入了多层架构设计模式,即使是小型的企业信息系统也逐渐向多层架构发展,以满足系统的可伸缩性以及可维护性.目前企业开发的平台占主导地位的是 J2EE 和 .NET ...
- 面向对象编程,设计原则,设计模式
2019独角兽企业重金招聘Python工程师标准>>> 面向对象编程,设计原则,设计模式 面向对象编程 面向对象编程与面向过程编程的区别 面向对象软件开发的优点 面向对象编程语言 C ...
- 类设计原则及设计模式(一篇就够)
类设计原则及设计模式 类设计的六大原则 设计模式定义 设计模式的分类 创建型模式 1. 简单工厂和工厂方法模式 定义和分类 2. 抽象工厂模式 3. 单例模式 定义 优缺点 饿汉式单例与懒汉式单例类比 ...
- Python、设计原则和设计模式-创建类设计模式
Python.设计原则和设计模式 前言 程序的目标:高内聚 低耦合 有哪些设计原则 设计原则是「高内聚.低耦合」的具体落地. 单一职责原则要求在软件系统开发.设计中,一个类只负责一个功能领域的相关职责 ...
- 通用权限管理设计篇_设计模式
摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/ 一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完 ...
最新文章
- 生成删除约束语句 SQL语句
- mysql的代码大全_MySql数目字函数大全
- 百度面试测试开发工程师内容
- Cannot check for MySQL Daemon startup because of mysqladmin failure
- Vue cli3.0创建Vue项目
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令
- 机器人走进开放源代码
- sqlite数据库基础学习
- ubuntu安装包常用下载地址
- 误差修正ECM模型怎么分析?
- 发现新世界:神级浏览器插件TamperMonkey(暴力猴)
- honeyd蜜罐简易部署——ubuntu
- redis是干什么的
- 【BZOJ3717】[PA2014]Pakowanie 状压DP
- 阿帕拉契州立大学代表团访问AURAK
- Window7使用虚拟桌面
- OA系统实施:理清OA需求很关键
- 【DB笔试面试764】在Oracle中,逻辑DG维护中常用到的SQL语句有哪些?
- python在电力系统中的应用_SKIDL: 在PYTHON中描述你的电路
- 【学习日志】2023.04.24 C++ 调整黑点、白点和中值以增加、平衡或降低对比度
热门文章
- VVC帧间预测(二)Merge mode with MVD (MMVD)
- Android制作天气预报软件 —— 天气查询
- 时隔一个月,讯飞星火大模型 V1.5 发布:星火 APP 登场,综合能力三大升级!
- checkmarx 8
- [AutoHotkey]mytimer.ahk
- 测试员薪资两极分化,如何成为年薪百万的阿里测开?
- MD5 c++ 实现
- java pinyin4j_java实现中文汉字转拼音 Pinyin4j的基本用法
- 3.Linux创建文件
- 如何设计推荐系统架构?