Java深入探索单例模式的应用

网友投稿 290 2022-07-25


目录1.单例2.单例设计模式的应用实例1.步骤2.单例模式-饿汉式3.单例模式-懒汉式

1.单例

1.所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

2.单例设计模式有两种方式:

1)饿汉式。

2)懒汉式

2.单例设计模式的应用实例

1.步骤

1)构造器私有化=》防止用户直接new出一个对象

2)类的内部创建对象

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

4)代码实现

2.单例模式-饿汉式

package com.demo.single_;

public class test01 {

public static void maihttp://n(String[] args) {

// girlfriend g01=new girlfriend("小红");

// girlfriend g01=new girlfriend("下华");

girlfriend t01=girlfriend.getzzeZHIavSInstance();

System.out.println(t01);

girlfriend t02=girlfriend.getInstance();

System.out.println(t02);

if(t01==t02)

System.out.println("true");

}

}

//有一个类,girlfriend

//只能有一个girlfriend

class girlfriend{

private String name;

//1.构造器私有化

private girlfriend(String name){

this.name=name;

}

// 2.在类的内部直接创建

private static girlfriend g=new girlfriend("小红");

//提供一个公共的static方法,返回对象g

public static girlfriend getInstance(){

return g;

}

@Override

public String toString()http:// {

return "girlfriend{" +

"name='" + name + '\'' +

'}';

}

}

测试结果

注:单例设计模式中的对象通常是重量级的对象,饿汉式可能造成创建了对象,但是没有使用

3.单例模式-懒汉式

package com.demo.single_;

//演示懒汉式的单例模式

public class test02 {

public static void main(String[] args) {

//new cat("大飞");错误。

System.out.println(cat.n);

cat instence=cat.getInstance();

System.out.println(instence);

//再次执行,依然是大黄,cat.getInstance()中的if语句不再执行

cat instence2=cat.getInstance();

System.out.println(instence2);

}

}

//希望在程序运行过程中,,只能创建一个cat对象

//使用单例模式

class cat{

private String name;

//1,将构造器私有化

private cat(String name) {

System.out.println("构造器被调用");

this.name = name;

}

//2,定义一个静态属性对象

private static cat c1;

public static int n=999;

//3,提供一个public的static方法,可以返回一个cat对象

public static cat getInstance(){

if(c1==null){

c1=new cat("大黄");

}

return c1;

}

@Override

public String toString() {

return "cat{" +

"name='" + name + '\'' +

'}';

}

}

//4,总结:只有当用户使用getInstence()时,才返回cat c1对象,

// 当后面再次调用时,会返回上次创建的对象

测试结果

3.饿汉式与懒汉式的区别

单例设计模式。•饿汉式VS懒汉式1.二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。

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

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

4.在我们javaSE标准类中,java.lang.Runtime就是经典的单例模式。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一文搞懂Spring中的注解与反射
下一篇:arthas jprofiler做复杂链路的调用分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~