网站首页 > 开源技术 正文
我们在面试过程中经常碰到的一道笔试题就是手写单例(singleton)模式,本文详细讲解了单例模式的两种实现形式。
单例(singleton)模式,当你实例化一个对象时,它可以确保你实例化的这个类将仅有一个实例。
当你使用单例模式第一次调用对象时,它就会被实例化,之后每一次调用都将返回同一个对象。单例模式代表在应用程序不同部分被再三使用的资源。其中常见的示例包括数据库连接和配置信息。
单例最重要的方面在于对创建实例的限制能力。如果不这样做,潜在的多个实例将被创建。
单例模式实现方式1:
class Database
{
private static $instance = null;
private function __construct()
{
}
public static function getInstance()
{
if (!(self::$instance instanceof Database)) {
self::$instance = new Database();
}
return self::$instance;
}
}
实现单例有 3 个关键点:
- 使用一个静态成员来保持一个单例实例,在这个例子中,我们有一个私有的 Database::$instance 属性。
- 一个私有的__construct()将决定这个类只能被本身所包含的静态方法实例化。
- Database::getInstance()静态方法将用于数据库类。当它被调用时,DB::getInstance() 将实例化一个 Database 类的对象并将这个对象指定给 Database:$instance 属性,然后返回这个对象,或只是返回先前实例化的对象。
我们之所以使用单例模式,是因为静态方法可以在全局范围内被访问,无论哪里,当我们需要一个数据库连接时,只需调用 Database::getinstance() 即可。
自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。
Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。
单例模式实现方式2:
trait Singleton
{
static $instance = null;
public static function getInstance()
{
$class = __CLASS__;
if (!(self::$instance instanceof _CLASS_)) {
self::$instance = new $class();
}
return self::$instance;
}
}
class DB
{
use Singleton;
private function __construct()
{
}
}
- 上一篇: 10款最好的GitHub的替代品!
- 下一篇: 我的前端架构养成记之整洁的工作流
猜你喜欢
- 2024-12-04 VASP中如何固定磁矩大小和方向?
- 2024-12-04 nginx服务的基本配置(nginx.conf文件的详解)
- 2024-12-04 《珈百璃的堕落》声优大空直美作客「铃毛庄」节目!
- 2024-12-04 终极 Nginx 配置指南(全网最详细)
- 2024-12-04 2016上半年度推荐!10个必用的免费Plugins清单!
- 2024-12-04 动漫资讯:只要有邪恶的地方,必定会有英雄出现!
- 2024-12-04 电脑文件后缀名即扩展名大全
- 2024-12-04 [ DeWeb使用技巧 ] DeWeb 实用化部署
- 2024-12-04 我的前端架构养成记之整洁的工作流
- 2024-08-01 php下载网络图片到本地(php下载网络图片方法)
你 发表评论:
欢迎- 05-16东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 05-16这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 05-16湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- 05-16Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- 05-16G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- 05-16DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 05-16上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- 05-16WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 最近发表
-
- 东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 湖人自媒体调查:89%球迷希望DFS回归 79%希望詹姆斯回归
- 一觉醒来湖人苦盼的纯3D终于到位 DFS能带给紫金军多少帮助
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)