单例模式的多种实现及优缺点比较

Head First一书中对单例模式的定义是:单例模式确保一个类只有一个实例,并提供一个全局访问点。 在很多实际场景应用中,我们希望某个类只能有一个实例化的对象,例如数据连接池,日志对象等等,这个时候我们就要使用单例模式了,单例模式的核心思想是私有化构造器,防止其他类任意实例化该类,具体的实现有多种,每种都会有其优缺点,让我们来仔细看看各种实现的差异吧。

依据我写代码的习惯,先上UML类图,我用的工具是StarUML,免费不需要破解哦:)

第一种实现:

public class MyClass {

    private static MyClass instance;

    private MyClass() {}

    public static MyClass getInstance() {
        if (instance == null) {
            return new MyClass();
        }
        return instance;
    }

    public void foo() {
        System.out.println("Rock and roll");
    }

}

------------快下班鸟,回家接着写------------------

时间: 2024-09-26 22:44:31

单例模式的多种实现及优缺点比较的相关文章

单例模式,多种实现方式JAVA

转载请注明出处:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): Java代码 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } retu

单例模式的多种实现

单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例.当一个类的实例有且只可以有一个的时候就需要用到单例模式了.为什么只需要有一个呢?有人说是为了节约内存,但这只是单例模式带来的一个好处.只有一个实例确实减少内存占用,可是我认为这不是使用单例模式的理由.我认为使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候.比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢? Singleton模式主要作用是保证

js创建对象的多种方式及优缺点

在js中,如果你想输入一个的信息,例如姓名,性别,年龄等,如果你用值类型来存储的话,那么你就必须要声明很多个变量才行,变量声明的多了的话,就会造成变量污染.所以最好的方式就是存储到对象中.下面能我就给大家介绍几种创建对象的方式,并且给大家说一下他们的优缺点 方式一:对象字面量 var obj={ name:"赵云", type:"突进", skill:"抢人头" } 缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高 方式二:

C#单例模式的多种写法

它的主要特点不是根据客户程序调用生成一个新的实例,而是控制某个类型的实例数量-唯一一个.(<设计模式-基于C#的工程化实现及扩展>,王翔).也就是说,单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题. public class Singleton { private static Singleton instance; private Singleton() {

C# 单例模式的多种简单实现

什么是单例模式? 这里我就不做过多的解释了, 毕竟关于Singleton的资料实在是太多太多了.点击这里 1.简单的思路就是, 创建对象单例的动作转移到另外的行为上面, 利用一个行为去创建对象自身, 如下: public class Singleton { private static Singleton _Singleton = null; public static Singleton CreateInstance() { if (_Singleton == null) { Console.

Javascript继承的多种方式和优缺点

本文讲解JavaScript各种继承方式和优缺点. 一.原型链继承 function Parent () { this.name = 'kevin'; } Parent.prototype.getName = function () { console.log(this.name); } function Child () { } Child.prototype = new Parent(); var child1 = new Child(); console.log(child1.getNam

单例模式的多种写法

public class Singleton { private Singleton(){}//私有化构造器 private static Singleton instance = null; //类的内部创建对象 public static Singleton getInstance(){ //暴露公共的get方法 if(instance == null){ instance = new Singleton(); } return instance; } } //饿汉 class Single

深入之创建对象的多种方式以及优缺点

// 1. 工厂模式 //缺点:对象无法识别,因为原型都指向Object function pe() { var o = new Object(); o.name = name; o.getname = function() { console.log(this.name) } return o } // 2. 构造函数模式 // 优点:实例可以识别为一个特定的类型 // 缺点:每次创建实例每个方法都要被创建一次 function Person(name) { this.name = name;

Javascript深入之创建对象的多种方式以及优缺点

1.工厂模式 function createPerson(name) { var o = new Object(); o.name = name; o.getName = function() { console.log(this.name) }; return o; } var person1 = createPerson('kevin') 缺点:对象无法识别,因为所以的实例都指向一个原型 2.构造函数模式 function Person(name) { this.name = name; t