云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站建设_广东佛山网站建设_怎么买

小七 141 0

网站建设_广东佛山网站建设_怎么买

这个由6部分组成的博客系列的第6部分讨论了单例对象的使用。正如在那个博客中所说的,大多数单例都是一个主题的变体,而那个博客中提供的ABAP示例代码只集中在这些变体中的一个的使用上。在这个博客中,我们探讨了定义和使用单例对象的一些其他变体,Singleton是一种面向对象的设计模式,它保证在程序执行过程中只存在一个类的单个实例。它是《设计模式:可重用面向对象软件的元素》(Gamma,Helms,Johnson,Vlissides)一书中涉及的23种面向对象设计模式之一。这本书于1995年首次出版,作为计算机编程中使用的设计模式的最终概要,大数据好就业吗,已经被许多面向对象的学者所接受。它的四位作者在业界被称为"四人帮",现在很多人引用这本书的时候只是简单地用这个名字的缩写:GoF.

根据GoF,Singleton设计模式背后的意图如下:

确保一个类只有一个实例,并提供一个全局访问点。

这个意图的第一部分建议我们需要能够控制对象的实例化,以确保只有一个对象被创建,而第二部分建议我们需要能够在对象被创建后提供对它的访问。

私有实例化

许多面向对象的语言提供了将对象创建限制在特定范围内的能力指定实体。这些功能之一允许将对象创建限制到类本身。这就是所谓的私有实例化。对于用ABAP编写的类,大数据的发展前景,私有实例化通过在类定义语句中包含"create private"限定符来表示,如:

实际上,通信云,对于ABAP,总是会有一个与类定义相关联的"create"选项。"create"后面的单词可能是"public"、"protected"或"private"。除非另有明确说明,否则选项"create public"对类有效,表示任何实体都可以创建该类的实例。

在类定义语句中使用"create private"限定符意味着没有其他实体可以创建该类的实例–只有该类可以创建该类的实例。这个概念一开始可能很难理解,许多对此概念不熟悉的人可能会问"如果只有类本身可以创建这些实例,那么如何创建此类类的任何实例?"通过定义一个同时包含静态成员和实例成员(属性和行为)的类,可以很容易地解决这个难题。静态成员有助于创建实例并提供对实例的访问。即使尚未创建类的实例,静态成员也可以在执行时使用。因此,用私有实例化定义的类可以具有公共静态方法,使调用方能够请求该类创建实例并向调用方提供实例引用。私有实例化将对象创建限制在类本身,但并不阻止类创建多个实例。

Singleton

为了确保只创建类的一个实例,大数据对比,可以为类定义一个静态属性,以保存对将成为类的唯一实例的引用。用于提供对类实例的访问的静态方法将检查保存对此唯一实例的引用的静态属性是绑定的(包含对活动对象的引用)还是未绑定的(为空或包含对非活动对象的引用)。未绑定时,将创建类的实例,并将其引用放置到包含对唯一实例的引用的静态属性中。这种技术称为延迟初始化,在这种情况下,将唯一实例的实例化延迟到第一个请求。从那时起,静态访问器方法对静态引用属性的检查将提供对类实例的绑定引用,因此不需要类的其他实例化,这意味着类的第一个实例化及其引用放在static属性中将是唯一的实例化,从而导致类的一个且只有一个实例。对于单例,类的静态成员将有助于访问其唯一的对象,并且该类将只为其定义实现此目的所需的静态成员数。

单例的变体

到目前为止,我们已经看到,为了保证一个类的一个且只有一个实例,我们需要以下的组合:,定义单例的三个标准:

类是用私有实例化定义的。类是用静态属性定义的,静态属性定义为对同一类的对象的引用。类是用静态方法定义的,以提供对类的唯一实例的访问。

如果我们用create private限定符定义我们的单例类的所有变体,那么对象实例化的以下变化是可能的:

将对象访问的以下变化留作可能:

a.通过保存其引用的公共静态属性直接访问唯一对象。

b.提供对唯一对象的引用作为静态实例访问器方法的导出参数。

c.引用sole对象是作为静态实例访问器方法的返回参数提供的。

注意,对于上面提到的每个实例化可能性,它是一个创建sole实例的静态方法和一个保存对sole实例的相应引用的静态属性。类似地,对于上面提到的每个对象访问可能性,它是提供对唯一实例的引用的静态属性或静态实例访问器方法。因此,提供对唯一实例访问的类的所有成员都是静态成员。

这些变量在对象实例化和对象访问上的实际组合如下:

1a–调用方通过类的public static属性直接访问唯一实例。

2b–调用方必须提供自己的实例引用变量接受对唯一实例的引用。

2c–调用方在使用"链式方法调用"访问它时,可以不提供自己的实例引用变量来接受对唯一实例的引用。

3b–与使用延迟初始化的2b相同。

3c–与使用延迟初始化的2c相同。

让我们探索每个组合。

示例程序