Java基础之:单例模式

2021-03-11 09:29

阅读:286

标签:string   int   没有   plain   run   直接   返回   简单   饿汉   

Java基础之:单例模式

设计模式

设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式 。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。

单例模式

对于一个类而言,外部只能获取其一个实例。

实现步骤:

1) 构造器私有化

2) 类的内部创建对象

3) 向外暴露一个静态的公共方法。getDog,getCat。

简单案例

package codeBlock;
?
public class Singleton {
?
    public static void main(String[] args) {
        
        Dog dog1 = Dog.getDog();
        Dog dog2 = Dog.getDog();
        System.out.println(dog1.getName()); //旺财
        System.out.println(dog2.getName()); //旺财
        System.out.println(dog2 == dog1);   //true
        
        
        Cat cat1 = Cat.getCat();
        Cat cat2 = Cat.getCat();
        System.out.println(cat1.getName());  //布偶
        System.out.println(cat2.getName());  //布偶
        System.out.println(cat2 == cat1);  //true
    }
?
}
?
//饿汉模式:声明一个对象,将其初始化并作为一个静态属性,在外部需要此类对象时,直接返回此对象。
class Dog{
    private String name;
    private static Dog dog = new Dog("旺财");  //静态属性,所以只有一个dog
    
    private Dog(String name) {
        this.name = name;
    }
    
    public static Dog getDog() {
        return dog;
    }
    
    public String getName() {
        return name;
    }
?
    public void setName(String name) {
        this.name = name;
    }
    
}
?
//懒汉模式:声明一个对象,并作为一个静态属性,在外部需要此类对象时将其初始化,再返回此对象。
class Cat{
    private String name;
    private static Cat cat ;    //静态属性,所以只有一个cat
    
    private Cat(String name) {
        this.name = name;
    }
    
    public static Cat getCat() {
        if(cat == null) {
            cat = new Cat("布偶");
        }
        return cat;
    }
    
    public String getName() {
        return name;
    }
?
    public void setName(String name) {
        this.name = name;
    }
    
}

 

饿汉模式与懒汉模式

  1. 二者最不同的点在于对象声明的时机。饿汉模式是在类加载时,就声明并初始化一个对象作为静态变量,而懒汉模式是在类加载时声明一个静态属性,在外部需要实例时再创建对象。

  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。

  3. 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。

  4. java.lang.Runtime就是经典的单例模式。

 

Java基础之:单例模式

标签:string   int   没有   plain   run   直接   返回   简单   饿汉   

原文地址:https://www.cnblogs.com/SongHai/p/14128829.html

上一篇:Spring中的Aware接口

下一篇:JAVA日报


评论


亲,登录后才可以留言!