java设计模式之单例模式(懒汉单例和饿汉单例)

单例模式是一种比较基础的设计模式,应该非常广泛,如应用程序的日志应用,Web应用的配置文件读取,数据库连接池的设计,网站的计数器,并且Spring MVC 框架的Controller默认也是单例的

那么到底什么是单例模式?单例模式的优点又有哪些?

单例模式的关键就是在系统运行期间,某个类有且只有一个实例,这种设计模式的最大优点在于可以对资源进行重复利用,节约重复创建和销毁的成本,从而降低服务器压力,提高程序的运行效率。

1、懒汉模式
懒汉模式就是指铁匠是个懒汉,这个锤子类的实例在没人用的时候,铁匠不去造它,这样做能节约铁匠铺的空间。
 

/**
 * 单例模式-懒汉模式
 * 1.构造器私有化
 * 2.提供一个static静态属性对象
 * 3.提供一个public的static方法,返回一个实例对象
 * 4.懒汉模式,只有在用户调用方法时,才会创建对象,之后再次调用,返回的是同一对象
 */
class a {
    private String name;
 
    private static Cat cat;
 
    private Cat(String name) {
        this.name = name;
    }
 
    public static a getCat() {
        if (cat == null) {
            cat = new Cat("小明");
        }
        return cat;
    }
 
    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

2、饿汉模式

这个模式可以较简单地解决同时有客人光顾的问题。即铁匠是个饿汉,总是担心生意上门了却没锤子可提供,因此铁匠铺开张的时候(类定义时)就把锤子造好等人来用

/**
 * 单例模式-饿汉模式
 * 在类加载的时候就会创建对象
 */
class B {
    public String name;
 
    private static B gf = new GirlFriend("小五");
 
    public static B getGf() {
        return gf;
    }
 
    /**
     * 构造器私有化,不能在本类之外new
     * @param name
     */
    private B(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}

通过上面代码可以看出,和懒汉模式唯一的区别就在于是否先生产好锤子。这种方式会使得空间占用变多,如果没人使用就白白浪费了。

猜你喜欢

转载自blog.csdn.net/m0_58019259/article/details/127638092