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

设计模式:解决某一类问题最行之有效的方法,java中有23种设计模式

一、单例设计模式概述:

  1、解决一个类在内存中只有一个对象(保证一个类仅有一个实例,并提供一个访问他的全局访问点)
    2、要保证对象的唯一:
      1.为了避免其他程序过多的建立该类对象,先禁制其他程序建立该类对象
      2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象
      3.为了 方便其他程序对自定义对象的访问,可以对外提供一些访问方式

   3、代码实现步骤:

      1.将构造函数私有化
      2.在类中创建一个本类对象
      3.给外部提供一个静态放阿飞获取对象实例

    4、两种实现方式:
      1、饿汉式
      2、懒汉式

二、饿汉式:

  这种是先初始化对象,称为:饿汉式 Single类一进内存,就已经创建好了对象(开发一般用这个,简单安全)

 1 public class SingleDemo1 {
 2     public static void main(String[] args) {
 3         Single s1 = Single.getInstance();//main函数中有了一个s1引用,获取到了Single对象的地址,指向Single对象
 4     }
 5 }
 6 class Single{
 7     private Single(){}//将构造函数私有化,不让其他程序建立对象
 8
 9     private static Single s = new Single();//下面的静态方法访问到该对象所以要将该对象也修饰为静态
10
11     //调用用类名调用,(方法的调用只有两种方式:对象调用和类名调用,这里没对象只能用类名调用,所以要静态)
12     public static Single getInstance(){
13         return s;
14     }
15 }
public class SingleDemo {
    public static void main(String[] args) {
        Singleton1 s = Singleton1.getInstance();
        s.print();
    }
}
/*
          把该类设计成单例设计模式:
              饿汉式
 */
class Singleton1{
    //构造函数私有化
    private Singleton1(){

    }

    //定义一个本类对象并实例化
    private static Singleton1 s = new Singleton1();

    public static Singleton1 getInstance(){
        return s;
    }

    public void print(){
        System.out.println("饿汉式——单例设计模式");
    }
}

如果想要该类只能建立一个对象那么只需在该类中加入这三部就可以了(这个类该怎么描述就怎么描述)

 1 public class SingleDemo1 {
 2     public static void main(String[] args) {
 3         //Test t1 = new Test();
 4         //Test t2 = new Test();
 5         Test t1 = Test.getInctance();
 6         Test t2 = Test.getInctance();
 7         t1.setNum(10);
 8         t2.setNum(20);
 9         System.out.println(t1.getNum());
10         System.out.println(t2.getNum());//两个打印结果都是20,因为内存中只有一个对象
11     }
12 }
13 class Test{
14     private int num;
15     private static Test t = new Test();
16     private Test(){}
17     public static Test getInctance(){
18         return t;
19     }
20     public void setNum(int num){
21         this.num = num;
22     }
23     public int getNum(){
24         return num;
25     }
26 }

三、懒汉式:

  对象是方法被调用时才初始化,也叫做对象的延时加载,称为懒汉式
  Single类进内存,对象还咩有存在,只有调用了getInstance方法时,才建立对象

public class SingleDemo {
    public static void main(String[] args) {
        Singleton2 s = Singleton2.getInstance();
        s.print();
    }
}
//懒汉式
class Singleton2{
    private static Singleton2 s = null;
    private Singleton2(){}

    public static Singleton2 getInstance(){
        if(s==null){
            s = new Singleton2();
        }
        return s;
    }
    public void print(){
        System.out.println("懒汉式——单例设计模式");
    }
}
 1 public class SingleDemo2 {
 2     public static void main(String[] args) {
 3
 4     }
 5
 6 }
 7 class Single{
 8     private static Single s = null;
 9     private Single(){}
10     //synchronized(同步)只要有一个程序进去其他程序就不能进来了,但是这样程序的效率的降低了,执行前需要先判断
11     public static synchronized Single getInstance(){
12         //减少判断锁的次数
13         if (s==null){
14             //最终的解决方案,减少判断的次数,上面那个函数就不用同步了
15             synchronized(Single.class){
16                 if (s==null)
17                     s = new Single();
18             }
19         }
20         return s;
21     }
22 }

加入同步为了解决多线程安全问题。加入双重判断是为了解决效率问题。

时间: 2024-10-09 21:20:51

java设计模式_single(单例设计模式)的相关文章

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

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

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

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

java软件设计模式只单例设计模式

概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 设计模式分为三种类型,共23种.创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式.结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.

设计模式总纲——单例设计模式

前两天写了设计模式总纲,今天就来讲讲我们在工程代码中最最最常用的设计模式了——单例设计模式,这个模式在工程代码上的出现率几乎为99.99999%,但是虽然很常用,但是用的好的人却不多,今天我们就来深入的说一说单例设计模式. 在学习一项新的知识之前,我们都要向自己提出三个问题,为什么要用这个知识,这个知识用在哪里,这个知识怎么用?既 why,where,how,3W模式,我们先来谈谈为什么需要单例设计模式,先来想想,如果一个工具类,比如一个读取配置文件的工具类,这类工具只是特定的功能类,既读取指定

设计模式之-----------单例设计模式

饿汉式: class Single { //   提前做好! private static final Single s = new Single(); //  私有化 构造函数  无法使用new 创建对象! private Single(){} //  对外提供接口 public static Single getInstance() { return s; } } 懒汉式: 懒汉 顾名思义  就是懒呗 什么时候用到 什么时候创建! class Single1 { private static

【设计模式】单例设计模式的N中Java实现方法

特点 单例模式的特点: 1.只能有一个实例: 2.必须自己创建自己的一个实例: 3.必须给所有其他对象提供这一实例. 饿汉式单例模式 也称为预先加载法,实现方式如下: [java] view plaincopy class Single { private Single()( Syustem.out.println("ok"); ) private static Single instance = new Single(); public static Single getInstan

Java设计模式之一 单例设计模式

1.什么叫设计模式: 设计模式的概念首先来源于其它行业:建筑业,在早起建房子的时候,肯定是经验缺乏.显得杂乱无序的,这就会造成很多问题,在行业发展过程,通过不断的经验积累,前辈们针对这些问题提出了合理解决方案,这就是设计模式,参照设计模式往往可以解决很多问题,在计算机编程方面,也会出现类似问题,所以牛人们把这些解决问题的方案进行归类和总结,形成了面向对象编程的23种设计模式. 2.单例模式(特点): Java中单例模式定义:"一个类有且仅有一个实例,并且自行实例化向整个系统提供."通过

Java设计模式之单例设计模式(Singleton)

单例设计模式 单例模式在日常开发中用的也比较多,顾名思义就是一个类的对象在整个系统中只能有一个 优点: 1.单例模式会阻止其他对象实例化其自己的单例对象副本,从而确保所有对象都访问唯一实例 2.由于在整个系统中指存在一个实例对象,避免了频繁的创建和销毁对象,因此可以节约系统资源 3.避免了对共享资源的多重占用 4.自行创建这个单例对象,避免使用时再去创建 缺点: 1.单例模式没有抽象层,所以扩展性比较差 2.不适用于变化的对象,如果同一类型的对象需要在不同的场景下使用,单例就会引起数据的错误 3

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

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