`

PHP类实例教程(十四):设计模式之单件模式

 
阅读更多

单件模式要解决的问题就是“如何让这个类只有一个实例”。

我们的web应用中,大量使用了数据库连接,如果反复建立与数据库的连接必然消耗更多的系统资源。

我们如何解决这个问题,建立唯一的数据库连接是必要的方式。

我们又如何知道与这个数据库的连接是否已经建立? 还是需要现在建立?

单件模式可以解决这个问题。

先假设我们需要一个类完成在内存中只有一份的功能,我们该如何做呢?

我们一步一步的使用前面学过的知识来写一个单件的例子。

问题1:

前面学过,每次用new 类名的方式,就可以创建一个对象。

我们必须禁止外部程序用 new 类名的方式来创建多个实例。

解决办法:

我们将构造函数设置成private ,让构造函数只能在内部被调用,而外部不能调用。

这样,这个类就不能被外部用 new 的方式建立多个实例了。

不能被外部用new实例化的类。

问题2:

我们已经禁止外部用new实例化这个类,我们改如何让用户访问这个类呢?前门堵了,我们需要给用户留个后门。

解决办法:

static 修饰的方法,可以不经实例化一个类就可以直接访问这个方法。

后门就在这里。

问题3:

虽然我们已经进入类内部,但我们要的是这个类的唯一实例?

先不管别的,我们先需要一个实例。

通过这个static的方法返回这个实例,如何做呢?

解决办法:

private的构造函数,不能被外部实例化。

但是我们已经成功潜入类的内部了(间谍?007?),我们在内部当然可以调用private的方法创建对象。

我们这样做看看。

下面的例子我们确实返回了A类的实例,但注意两次执行返回的不是同一个实例。

问题4:

我们已经通过static方法返回了A的实例。但还有问题。

我们如何保证我们多次操作获得的是同一个实例的呢?

解决办法:

static的属性在内部也只有一个。

static 属性能有效的被静态方法调用。

将这个属性也设置成private,以防止外部调用。

先将这个属性设置成 null。

每次返回对象前,先判断这个属性是否为null 。

如果为null 就创建这个类的新实例,并赋值给这个 static 属性。

如果不为空,就返回这个指向实例的static 属性。

到此,我们写了一个最简单的单件模式 。

现在,你可以尝试写一个应用单件设计模式的数据库连接类。

要记住单件模式的使用效果和书写方式。

分享到:
评论

相关推荐

    设计模式 单件模式 设计模式 单件模式

    单件模式是指确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享的程序设计方法。单件模式是一种非常实用的设计模式,它可以控制一个类的实例数量,使得调用者可以从一个公共的众所周知的...

    深入浅出设计模式之单件模式

    ### 深入浅出设计模式之单件模式 #### 一、单件模式概述 单件模式(Singleton Pattern)是软件设计模式中最为常见的一种,它的主要目标是确保某个类只有一个实例,并提供一个全局访问点。单件模式在很多情况下都...

    设计模式 之 单件模式

    单件模式(Singleton Pattern)是设计模式中的一种,它的核心意图是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,这样的设计模式能够有效地控制资源的使用,限制实例的数量,以及协调对象间的交互...

    设计模式之单件模式

    这份文档以例子的形式讲诉了设计模式之单件模式,希望可以帮助学习的人!

    设计模式之单件模式、工厂模式、策略模式、观察者模式(php描述)(资料整理)

    本文将深入探讨四种常见的设计模式:单件模式(Singleton)、工厂模式(Factory)、策略模式(Strategy)和观察者模式(Observer),并以PHP语言为背景进行解释。 首先,我们来看单件模式。单件模式确保一个类只有...

    设计模式_--_工厂模式和单件模式

    ### 设计模式——工厂模式与单例模式 #### 一、引言 设计模式是软件工程领域中的一个重要概念,它代表了在特定情况下解决常见问题的最佳实践。在本篇文章中,我们将深入探讨两种广泛使用的软件设计模式:工厂模式...

    [创建型模式] head first 设计模式之单件模式(Singleton)

    **单例模式(Singleton)**是软件设计模式中的一种创建型模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,例如管理共享资源、配置对象或者数据库连接等。单例...

    设计模式\单件模式VS2005

    单件模式(Singleton Pattern)是软件设计模式中的一种经典模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、数据库连接等需要全局唯一的...

    C#设计模式,单件模式,C#代码

    单件模式是一种创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这个模式在许多场景下非常有用,例如管理共享资源、日志记录、数据库连接等,因为它可以避免因多个实例导致的数据不...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    设计模式之我见(1):设计模式概述 (100%) 设计模式面面观(2):设计模式基本要素与原则 (100%) 设计模式面面观(3):单件模式(Singletion)-创建型模式 (100%) 设计模式面面观(4):工厂模式...

    设计模式——单实例模式、单件模式——Java编写

    单实例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统运行过程中只有一个实例存在,并提供一个全局访问点,以保证所有对该类对象的访问都指向这个唯一的实例。这种模式在Java中广泛应用于配置管理...

    面向对象设计模式:Singleton 单件(创建型模式)

    李建忠面向对象设计模式视频精讲:Singleton 单件(创建型模式)

    Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

    单件模式(Singleton pattern)是设计模式中的一种结构型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于系统中需要频繁创建和销毁的对象,如日志服务、线程池或者数据库连接等...

    opencv单件设计模式

    单件模式确保一个类只有一个实例,并提供一个全局访问点,这样在整个程序中可以统一管理和控制这个实例。 在OpenCV中,单件设计模式可能被用来管理共享资源,如摄像头、图像缓存或者复杂的计算对象。这种模式确保了...

    二十三种设计模式【PDF版】

    设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

    C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)

    标题和描述均聚焦于"C#面向对象设计模式"之中的"Singleton单件(创建型模式)",这是一种在软件工程领域广泛运用的设计模式,其核心在于确保一个类只有一个实例,并提供一个全局访问点,以实现资源的有效管理和控制。...

    基于C#的设计模式中的单件模式

    单件模式(Singleton Pattern)是软件设计模式中的一种基础模式,它确保一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式的实现有多种方式,包括懒汉式、饿汉式以及线程安全的实现。下面我们将详细讨论...

    C++设计模式课件12_Singleton_单件模式.pdf

    单件模式是一种创建型的设计模式,它通过限制类的实例化过程来确保整个系统中某个类只有一个实例存在。这个唯一的实例通常是通过一个公共静态方法或一个静态成员变量来获得的。 #### 二、单件模式的优点与缺点 **...

    c++实现单件模式 c++实现单件模式 c++实现单件模式

    单件模式(Singleton Pattern)是设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在软件开发中被广泛应用,比如配置管理、数据库连接池、日志服务等场景,需要确保全系统...

Global site tag (gtag.js) - Google Analytics