java面试题 单例设计模式

单例设计模式

  1. 某个类必须只有一个实例 (构造器私有化)
  2. 类必须自行创建实例(含有一个该类的静态变量存储该实例)
  3. 类自行向其他类提供这个实例  (对外提供获取该实例对象的方式)

饿汉式

在类初始化的时候直接创建对象  不存在线程安全问题

  1、直接实例化饿汉式(简洁直观)

   2、静态代码块饿汉式(适合复杂实例化)

    3、枚举式(最简洁)

  1 

1 public class Singleton1 {
2     public final static Singleton1 singleton = new Singleton1();
3
4     private Singleton1() {
5
6     }
7 }

2

1 public enum 枚举{
2    // 实例变量名
3    instance
4 }

3

public class Singleton2 {
    public final static Singleton2 INSTANCE;
    static {
        INSTANCE = new Singleton2();
    }
    private Singleton2() {

    }
}
public class Singleton2 {
    public final static Singleton2 INSTANCE;    private String ss
    static {        info =从文件中获得数据
        INSTANCE = new Singleton2("info");
    }
    private Singleton2(String s) {
        this.ss=s;
    }
}
 

懒汉式:延迟创建对象

 4、线程不安全式(适用于单线程)

    5、双重校验式,线程安全(适用于多线程)

    6、静态内部类式(适用于多线程)

//线程不安全public class s {
 2
 3    private static s instance;
 4    private s(){}
 5
 6   public static s getInstance(){
 7     if (instance==null){
 8           instance=new s();
 9      }
10     return  instance;
11   }
12 }
//线程安全版
public class s2{

    private s2(){}
    private static s2 instance;
    public static s2 getInsatnce(){

     if(!instance==null){
        synchronized(s2.class){

          if(instance==null){
           instance=new s2();
          }
        }
     }
     return instance;
   }
}
 1 //在内部类被加载和初始化的时候  才创建instance实例对象
 2 //静态内部类不会随着外部类的加载和初始化而初始化   它需要单独去加载和初始化
 3 //因为是在内部类加载和初始化的时候才加载和创建的 因此是线程安全的
 4 public  class s3{
 5
 6    private s3(){}
 7
 8     private static class Inner{
 9         private static final s3 instance =new s3();
10    }
11
12    public static s3 getInstance(){
13
14     return Inner.instance;
15   }
16 }

原文地址:https://www.cnblogs.com/weiikun/p/10986620.html

时间: 2024-12-20 21:16:04

java面试题 单例设计模式的相关文章

笔记:Java中的单例设计模式

之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类有且仅有一个实例,并且自行实例化向整个系统提供. 单例模式的用处:一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器.如在Windows中就只能打开一个任务管理器.如果不使用机制对窗口对象进行唯一化,将

Java面向对象_单例设计模式

单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当一个类中没有属性(对象的状态):该类作为工具类使用非常频繁: 好处:节省内存(因为不断创建对象会消耗内存) 1 public class Practice14 { 2 3 public static void main(String[] args) { 4 // TODO Auto-generate

Java学习之单例设计模式

单例设计模式:解决一个类在内存只存在一个对象. (1) 想要保证对象唯一. a)为了避免其他程序过多建立该类对象.先禁止其他程序建立该类对象 b)还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象. c)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式. (2) 这三部怎么用代码体现呢? a)将构造函数私有化. b)在类中创建一个本类对象. c)提供一个方法可以获取到该对象. (3) 对于事物该怎么描述,还怎么描述. 当需要将该事物的对象保证在内存中唯一时,就将以上的三

Java中的单例设计模式举例

本例中通过将构造函数私有化的方式将实例化对象的代码放到类内部的静态函数中,从而实现单例设计模式. class Singleton { static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return Singleton.instance; } public void func() { System.out.println("Hi t

java中的单例设计模式

一.饿汉式,线程安全的. package com.cal; public class SingleTon { //1.私有的构造方法,不应许new对象 private SingleTon(){} //2.自己提供一个私有的静态对象 private static SingleTon instance = new SingleTon(); //3.给外部提供一个公共的静态方法 public static SingleTon getInstance(){ return instance; }} 二.懒

Java——单例设计模式

设计模式:解决某一类问题最行之有效的方法.Java中23种设计模式:单例设计模式:解决一个类在内存中只存在一个对象. 想要保证对象唯一.1,为了避免其他程序过多建立该类对象.先禁止其他程序建立该类对象2,还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象.3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式 这三部怎么用代码体现呢?1,将构造函数私有化.2,在类中创建一个本类对象.3,提供一个方法可以获取到该类对象. 对于事物该怎么描述,还怎么描述.当需要将该事物的对象

java设计模式之单例设计模式

设计模式:解决某一类问题最行之有效的方法. java中23种设计模式. 单例设计模式:解决一类在内存中只存在一个对象. Runtime()方法就是单例设计模式进行设计的. 解决的问题:保证一个类在内存中的对象唯一性. 比如:多程序读取一个配置文件时,建议配置文件封装成对象.会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的. 1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象. 2.还为了让其他程序可以访问该类对象,只好在本类中自定

黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计模式分类: 创建模式:是对类的实例化过程的抽象化,又分为类创建模式和对象创建模式 类创建模式:工厂方法模式 对象-:简单工厂(静态工厂方法)模式.抽象工厂模式.单例模式.建造模式- 结构模式:描述如何将类或者对象结合在一起形成更大的结构 适配器模式.缺省模式.合成模式.装饰模式(包装模式).门面模式- 行为模式:对不同的对象之间划分责任和算法的抽象化 不变模式.策略模式.迭代子模式.命令模

java设计模式_single(单例设计模式)

设计模式:解决某一类问题最行之有效的方法,java中有23种设计模式 一.单例设计模式概述: 1.解决一个类在内存中只有一个对象(保证一个类仅有一个实例,并提供一个访问他的全局访问点)  2.要保证对象的唯一: 1.为了避免其他程序过多的建立该类对象,先禁制其他程序建立该类对象 2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象 3.为了 方便其他程序对自定义对象的访问,可以对外提供一些访问方式 3.代码实现步骤: 1.将构造函数私有化 2.在类中创建一个本类对象 3.给外部提供