JAVA学习第十课(单例设计模式)

杂谈:

如果一个类里的方法都是静态的,那么就没有必要创建对象,为了不让其他程序创建对象,就可以把当前类的构造函数私有化。

class MAN
{
	private MAN()
	{
	}
}

文档注释:命令:javadoc

只能解析/** 开始至 */结束的内容;/* */则不行

路径设置问题:

当要运行,两个以上路径中的class文件时,路径都要设置,命令:classpath=.;c:\myhelp或者:classpath=.;%myhelp%

清除路径: set classpath=

设计模式:对问题行之有效的解决方案

单例设计模式:

保证一个类在内存中对象的唯一性

必须对于多个程序使用同一个配置信息对象时,就要保证对象的唯一性

如何保证对象的唯一性:

1.不允许其他对象new对象

2.在该类中创建一个本类实例

3.对外提供一个方法,让其他程序可以获取该对象

步骤:

1.私有化该类的构造函数

2.通过new在本类中创建一个本类对象

3.定义一个共有的方法将创建的对象返回

import java.util.Scanner;

class MAN
{
	private static MAN jo = new MAN();//第二步
	//不共有,为了可控
	private int x = 5;
	private MAN()//第一步
	{

	}
	public static MAN Creat (String key) //第三步
	{
		if(key=="stdio")//正确就给予对象使用,否则不
		return jo;
		return null;
	}
	void show()
	{
		System.out.println("ASDf");
	}

}
public class Main
{

	public static void main (String[] args)
	{
		//MAN SS = MAN.Creat();
		String key = "stdio";
		MAN s = MAN.Creat(key);
	}
} 

单例设计的第一种模式

//饿汉式

示例:

import java.util.Scanner;

class Test
{
	private static Test jo = new Test();//第二步,//类一加载,对象就存在
	//不共有,为了可控
	private int num;;
	private Test()//第一步
	{

	}
	public static Test Creat (String key) //第三步
	{
		if(key=="stdio")//正确就给予对象使用,否则不
		return jo;
		return null;
	}
	public void set(int num)
	{
		this.num = num;
	}
	public int get()
	{
		return num;
	}
	void show()
	{
		System.out.println("ASDf");
	}

}
public class Main
{

	public static void main (String[] args)
	{

		String key = "stdio";
		Test s1 = Test.Creat(key);
		Test s2 = Test.Creat(key);
		System.out.println(s1==s2);
		s1.set(10);
		s2.set(20);
		System.out.println(s1.get()+"  "+s2.get());//20 20,因为只有一个对象
	}
} 

类中创建的对象  内存示意图:

单例设计模式的另一表现:

//懒汉式,一开始不做,真正用的时候才做,特点:延迟加载模式

class Test
{
	private static Test s = null;//类加载进来,只有调用了Creat方法时,且符合创建条件时,才会创建对象
				    //也就是单例设计模式,延迟加载模式,一般考察点
	private int num;;
	private Test()
	{

	}
	public static Test Creat (String key)
	{
		if(key=="stdio" && s==null)
		s = new Test();//如果符合就给予对象使用

		return s;
	}
	public void set(int num)
	{
		this.num = num;
	}
	public int get()
	{
		return num;
	}
	void show()
	{
		System.out.println("ASDf");
	}

}
public class Main
{

	public static void main (String[] args)
	{

		String key = "stdio";
		Test s1 = Test.Creat(key);
		Test s2 = Test.Creat(key);
		System.out.println(s1==s2);

	}
} 

PS:懒汉式存在一些隐患,如果被多线程技术所操纵时,并发访问,有可能导致无法保证对象的唯一性,当改到保证唯一性时,效率会降低

面试时,一般会面试 懒汉式

开发时,用 饿汉式

时间: 2024-08-26 13:53:53

JAVA学习第十课(单例设计模式)的相关文章

java几种方式实现单例设计模式

单例模式的几种实现方式: 一:饿汉式单例 方式一:枚举方式获得单例对象 方式二:静态属性获得单例对象 方式三:静态方法获得单例对象 二:懒汉式单例 方式一:静态方法获得单例对象(线程安全) 方式二:内部类方式去获取单例对象 示例: 恶汉式:方式一 enum Singleton{ INSTANCE;//单例 } 恶汉式:方式二 class Singleton{ public static final Singleton INSTANCE = new Singleton();//单例 private

JAVA学习第二十课(异常的应用和注意事项(三))

十.异常的应用 import java.util.Random; import javax.rmi.CORBA.Stub; /* *老师用电脑上课 *用面向对象思考问题 *问题设计两个对象 *老师,电脑 * *可能发生的问题: *电脑蓝屏.电脑冒烟 */ class Lan extends Exception//蓝屏 { Lan(String problem) { super(problem); } } class Fir extends Exception//冒烟 { Fir(String p

Java: 单例设计模式

设计模式: * 设计模式:解决某一类问题最行之有效的方法:* Java有23中设计模式* 单例设计模式:解决一个类在内存只存在一个对象:* * 想要保证对象唯一* 1.为了避免其他程序过多建立该类对象.先控制禁止其他程序建立该类对象* 2.还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象* 3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式* * 这三部如何用代码体现呢?* 1. 将构造函数私有化* 2. 在类中建立一个本类对象* 3. 提供一个方法可以获取到该对象

JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题

一.多线程下的单例设计模式 利用双重判断的形式解决懒汉式的安全问题和效率问题 //饿汉式 /*class Single { private static final Single t = new Single(); private Single(){} public static Single getInstance() { return t; } } */ //懒汉式 class Single { private static Single t = null; private Single()

Java学习笔记(二十四):单例设计模式singleton

为什么要使用singleton设计模式? 假设设计了一个操作数组的工具类(Tools),里面有一个锤子的方法(Hammer),如果不使用singleton设计模式,每次想调用Hammer方法都需要new一个Tools类出来 1 class Tools{ 2 //锤子 3 public void Hammer(){ 4 System.out.println("使用锤子"); 5 } 6 } 7 8 public class ToolsDemo { 9 public static void

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是class对象 我们在上节验证了同步函数的锁是this,但是对于静态同步函数,你又知道多少呢? 我们做一个这样的小实验,我们给show方法加上static关键字去修饰 private static synchronized void show() { if (tick > 0) { try { Thread

黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计模式分类: 创建模式:是对类的实例化过程的抽象化,又分为类创建模式和对象创建模式 类创建模式:工厂方法模式 对象-:简单工厂(静态工厂方法)模式.抽象工厂模式.单例模式.建造模式- 结构模式:描述如何将类或者对象结合在一起形成更大的结构 适配器模式.缺省模式.合成模式.装饰模式(包装模式).门面模式- 行为模式:对不同的对象之间划分责任和算法的抽象化 不变模式.策略模式.迭代子模式.命令模

Java学习之单例设计模式

单例设计模式:解决一个类在内存只存在一个对象. (1) 想要保证对象唯一. a)为了避免其他程序过多建立该类对象.先禁止其他程序建立该类对象 b)还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象. c)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式. (2) 这三部怎么用代码体现呢? a)将构造函数私有化. b)在类中创建一个本类对象. c)提供一个方法可以获取到该对象. (3) 对于事物该怎么描述,还怎么描述. 当需要将该事物的对象保证在内存中唯一时,就将以上的三

python学习【第十篇】单例设计模式

单例设计模式 目的:让类创建对象,在系统中只有唯一的实例,让每一次创建的对象返回的内存地址都是相同的. __new__方法 使用类名创建对象时,python解释器首先会调用__new__方法为对象分配空间 __new__方法是有object基类提供的静态方法,主要作用有两个: 为内存中的对象分配空间 返回对象的引用,python解释器获得引用后会作为第一个参数返回给__init__方法 python中的单例: __new__方法只创建一次空间,返回一次引用 __init___方法只初始化一次 所