`

由static引出单例模式

    博客分类:
  • j2se
 
阅读更多
单例模式的特点:保证在整个应用程序中只存在一个对象
单例模式的步骤:
1.把构造方法私有化,这样就能够保证只有本类能够创建本类的对象。(保证了本类只能创建本类的一个对象,外界不能创建本类的对象)
2.把需要共享的属性或者方法写成静态的,目的是供外界调用。但是当需要共享的属性和方法过多的时候,就会产生代码冗余,因此最好的办法就是直接把此类声明成静态的变量。
3.构造方法已经写好了,此时要做的就是创建对象了。用new关键字创建对象,把这个对象传给一个引用类型的变量private static Single s = new Single(),之所以要把这个对象赋值给一个引用类型的变量,是为了要用变量的static关键字。此时把这个对象共享了。此时外界可以用类名去调用这个类了,但是调用的也是这个类的静态方法(因为该类的对象是静态的,因此该类的对象调用方法的时候,也必须调用静态的方法),因此此时写一个静态方法供外界调用。public static Single getInstance() {return s;}
(外界虽然不能创建本类的对象,但是可以调用本类对象中的静态方法)
----------以下是代码:
public class Single
{
/**
             例如程序员在电脑上下载文件,公司的所有程序员要用这个文件,但是没必要每个人都下载。只要有一个人下载,其他人用就行了


要求:只存在该类的一个对象

1 将构造函数私有化(这样的目的是只有本类自己能够产生我自己的对象,别人不能创建我。也就是说别人无法下载)
2 自己给创建对象  ()
3 提供公共static方法获得该类的对象

**/
private String str="";

private static Single s = new Single();//2.别人不能创建这个类的对象,那我自己给自己创建对象
private Single()//1.这个类的对象不能随便创建,只能本类创建
{

}
public static Single getInstance()//3.获取私有属性的值,用属性Single 的get方法,方法名字是实例的意思
{
return s;
}



public String getStr()
{
return this.str;
}
public void setStr(String str)
{
this.str=str;
}

public void read()
{
this.str="只存在该类的一个对象,下载文件";
}

}




---外界调用过程
public class SingleTest 
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();//实例化
s1.read();  //通过read方法,把值保存在属性str中了。
String str=s1.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str="+str);//输出

Single s2 = Single.getInstance();//实例化
//s2.read();  //通过read方法,把值保存在属性str中了。
String str2=s2.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str2="+str2);//输出
s2.setStr("111111111111111");//设置str值

Single s3 = Single.getInstance();//实例化
//s3.read();  //通过read方法,把值保存在属性str中了。
String str3=s3.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str3="+str3);//输出
}
}
分享到:
评论

相关推荐

    C#单例模式详解 C#单例模式详解C#单例模式详解

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式常用于管理共享资源或控制类的实例化过程,以提高性能、节约系统资源,特别是在整个应用程序生命周期内只需要一...

    java单例模式实例

    单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们...

    使用C++11实现线程安全的单例模式

    在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式...

    设计模式——单例模式

    **设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...

    7种单例模式

    单例模式是软件设计模式中的一种经典模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制共享资源、管理配置对象等。下面将详细介绍七种常见的单例模式实现...

    几种单例模式demo

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制资源的唯一性、管理共享配置或者创建昂贵的对象时避免频繁创建销毁。 ...

    Java 单例模式 工具类

    Java中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式常用于控制资源的访问,比如数据库连接池、线程池或者日志对象等。本篇文章将深入探讨如何在Java中...

    单例模式详解~~单例模式详解~~

    单例模式是一种设计模式,它的主要目标是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,单例模式常用于控制资源的共享,比如数据库连接池、线程池或者日志系统等,这些资源通常需要全局唯一且高效地...

    设计模式之单例模式源码demo

    单例模式是软件设计模式中的经典模式之一,其主要目的是控制类的实例化过程,确保在应用程序的整个生命周期中,某个类只有一个实例存在。这样的设计通常适用于那些需要频繁创建和销毁,但资源消耗较大的对象,如...

    使用单例模式创建学生管理系统(饿汉式、懒汉式)

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java或类似的面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。在这个...

    设计模式C++学习之单例模式(Singleton)

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于...

    设计模式单例模式

    单例模式是软件设计模式中的一种基础且广泛应用的模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中需要频繁创建和销毁对象,且对象创建成本较高,或者需要共享资源的情况下非常...

    单例模式的要点及模式

    单例模式是软件设计模式中的一种经典模式,其核心思想在于限制类的实例化过程,确保在整个应用程序中只有一个实例存在。这种模式常用于管理共享资源,例如数据库连接、线程池或者全局配置等,以避免资源浪费和状态...

    Java设计模式之单例模式的七种写法

    Java设计模式之单例模式的七种写法 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常...

    Java 单例模式.pptx

    ### Java 单例模式详解 #### 一、什么是单例模式? 单例模式是一种常用的软件设计模式,在这种模式中,一个类只能拥有一个实例,并且该类必须自行创建并提供这个实例。通常,单例模式用于确保某个类在整个应用程序...

    23钟设计模式之单例模式

    单例模式是一种常用的设计模式,它的核心思想是在整个应用程序中,一个类只能有一个实例存在。单例模式常用于控制资源的共享,例如数据库连接池、日志服务等。单例模式有多种实现方式,常见的包括懒汉式、饿汉式以及...

    单例模式详解

    单例模式详解 单例模式是 Java 设计模式中的一种常见模式,旨在保证整个应用中只有一个类的实例存在。单例模式分为三种:懒汉式单例、饿汉式单例、登记式单例。下面对单例模式的特点、实现方式和应用场景进行详细...

    单例模式PHP实现代码类.zip

    单例模式是一种设计模式,它控制了类的实例化过程,确保一个类只有一个实例,并提供一个全局访问点。在PHP中,单例模式通常用于管理共享资源,如数据库连接、缓存系统或日志记录,因为这些场景下,创建多个实例可能...

Global site tag (gtag.js) - Google Analytics