【小白的java成长系列】——构造方法私有化(单例设计)

有了解过spring框架的童鞋们就知道,spring的bean默认是什么形式呀?———单例形式的。

问:那什么叫做单例?单例其实就是Singleton,顾名思义就是只有单个的实例对象操作。

那为什么要使用单例呢?

至于这个问题,后面再做解释,我们先看代码:

package me.javen.oop;

public class SingletonDemo {

	public static void main(String[] args) {
		Singleton singleton1 = Singleton.getInstance();
		Singleton singleton2 = Singleton.getInstance();

		System.out.println(singleton1 == singleton2);
	}
}

class Singleton{
	private static Singleton singleton;

	public static Singleton getInstance(){//提供唯一的对象获取口
		if(singleton == null){
			singleton = new Singleton();
		}
		return singleton;
	}

	private Singleton(){//私有化构造方法
		System.out.println("只创建一次~");
	}
}

我想问一下同志们,这个的输出是什么?

运行输出结果:

只创建一次~

true

我们可以看到singleton1和singleton2是相等的,意味着这两个对象是同一个对象。

首先来看一下私有化构造方法:

意味着外部使用Singleton这个类的时候,不能通过new关键字创建对象了。。以下会报错。。

都不能new了,那我们怎么使用Singleton类呢?

通过以下方式公开:

	public static Singleton getInstance(){//提供唯一的对象获取口
		if(singleton == null){
			singleton = new Singleton();
		}
		return singleton;
	}

能不能不提供这样的一个方法?

当然能喽,只是不提供这样的一种方式,你这个类就真的无法使了~

现在来回答开篇的那个问题,为什么要使用单例?

1、减少不必要的内存开销,你想啊,要是创建10个对象,就得开销10分内存吧,而单例就1个对象,当然就开销1份内存喽。。

如果能减少内存开销,那我们在设计类的时候,可不可以都设计成单例的?这样不是很节省内存。。这个问题,先不解释哈~留给学习的好童鞋思考

2、简化对象创建过程的复杂性。。这个怎么说呢,要看对象创建的复杂性了~

【小白的java成长系列】——构造方法私有化(单例设计)

时间: 2024-11-06 18:19:17

【小白的java成长系列】——构造方法私有化(单例设计)的相关文章

【小白的java成长系列】——String类的深入分析(基于源码)

接着前面面向对象来说吧~今天来说说String类..其实String类也包含很多面向对象的知识的~ 首先来问一个问题:我们在开发过程中,如果要使用一个类的话,就要创建对象,这句话没什么问题吧~在实际开发的时候确实是这样的,只有创建了对象才能真正的去使用一个普通的类,我们一般创建对象,几乎所有的类创建对象都是要通过new关键字来创建的~ 问题就来了..为什么我们的String可以直接写成String str = "abc";这样子呢? 当然String类也可以通过new来创建对象的...

【小白的java成长系列】——多线程初识(多人买票问题)

本来这节内容是要到后面来说的,因为最近在弄并发的问题,推荐一本书<java并发编程实战>,深入的讲解了多线程问题的.本人最近也刚好在看这本书,还不错的~ 多线程的相关概念,就不用说了的,自己可以去网上查找,有一大堆关于它的讲解~ 先来看看买票的程序: package me.javen.thread.one; public class TicketDemo { public static void main(String[] args) { // 使用Thread类的方式 // TicketTh

【小白的java成长系列】——this关键字

先来看一下下面这段代码: package me.javen.oop; public class ThisDemo { public static void main(String[] args) { Dog dog = new Dog("小花", 10);//创建对象 System.out.println(dog); } } class Dog{ private String name; private int age; public Dog(){}//无参构造 public Dog(

【小白的java成长系列】——java关键字

准备出一个系列的内容啦,今天就从关键字开始说起吧~ 类型 关键字 说明 关键字 说明 访问控制权限 public 公共的,公开的, protected 受保护的,用来修饰属性或方法.只能符合有包内友好关系,或者是父子友好的类才能够访问,即:同层次包底下的可以访问:不能修饰类. private 私有的,用来修饰属性或方法,只能类的内部本身才能够访问,不能修饰类.   其实修饰符还有一种友好的类型 类.方法和变量修饰符 abstract 抽象;可以用来修饰类和方法,被修饰的类不能够实例化(即不能用n

【小白的java成长系列】——Java基础知识

今天来说说java的基础知识,个人感觉都不知道要说啥的,还是为后面的内容做一些铺垫吧~ 今天主要说的都是java面向对象之前的基础知识,比如数据类型呀,表达式运算符呀~等等一系列的知识,下节来说说面向对象.今天这节我就不用程序来说明,直接用文字说明.因为个人感觉真木有啥好说的,这些程序后续都会说到的,比较简单,写写就会了的..好吧~开始了... 1. Java数据类型划分: 基本数据类型:都是一个个具体的值 数值型:表示具体的数字,所有的整数默认情况下都是int,所有的小数都是double型的

【小白的java成长系列】——顶级类Object源码分析

首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是很喜爱的~ java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 找到下面的: 下载自己喜爱的版本即可,解压,点击~/jdk-7u60-apidocs/api/index.html就可以查看其api了: 跟上网一样一样的,点击相应链接就可以查看其信息了. 进入正题,说说Object这个类: 先

【小白的java成长系列】——面向对象基础

今天来说说java面向对象的知识点~事实上.java在其发展过程中可以成功.非常大一部分原因是其面向对象的思想~ 1.概念 如今来说面向对象思想.也不是什么新的知识点了,我们知道如今非常多语言都有面向对象的思想了:当然我们还知道如今依然非常火的C语言.事实上还是面向过程的语言.包含近期一段时间也出现了非常多新的思想,比方面向函数,面向分布式,面向...等等一系列的东东,事实上这些都仅仅是一个概念而已~ 在面向对象中.实际上还存在着三个基本的特性: ·封装性:保证对外部不可见: ·继承性:继续发扬

【小白的java成长系列】——java ide 开发工具eclipse的操作

今天看了一下自己的博客文章,里面的内容还是比較杂的,有好多技术,有好多语言,都没有突出自己的强项,能够说,从博客里面,看不出我究竟是做哪块的..加上今天被授予了博客准专家勋章,自己想了一下,还是得梳理一下自己的知识点,事实上我是做java开发,眼下职位是java高级开发project师. 今天来说说java的IDE神器--eclipse. 1.下载地址:http://www.eclipse.org/downloads/ 前提是你要安装好jdk,參照http://blog.csdn.net/ens

Java设计模式中的单例设计

/** * 单例设计模式 * 应用场合:只需要一个对象的 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型有:饿汉模式.懒汉模式 * 下面的例子是一个饿汉模式的例子 */ class SingleDemo { // 1.将构造方法私有化,不允许外部直接创建使用 private SingleDemo() {} // 2.创建类的唯一实例,使用private static修饰 private static SingleDemo instance = new SingleDemo(); //