`

单例模式(逐步递进的三种)

阅读更多
package 单例模式A;

public class SingletonPatternA {
	
	@SuppressWarnings({ "static-access", "unused" })
	public static void main(String args[]){
		
		 Emperor emperor1 = Emperor.getInstance();
		 emperor1.emperorInfo();
		 
		 Emperor emperor2 = Emperor.getInstance();
		 emperor1.emperorInfo();
		
		 if(emperor1 == emperor2){    //判断emperor1 和emperor2 是否是同一个人
			 System.out.println(emperor1+"=="+emperor2+" true.");
		 }
	}
}

class Emperor {
	
	private static Emperor emperor = null;
	
	public Emperor(){}
	
	public static Emperor getInstance(){
		if(emperor ==null){
			emperor = new Emperor();
		}
		return emperor;
	}
	
	public static void emperorInfo(){
		System.out.println("我是皇帝某某···");
	}
	
}

//**************************************************************************

package 单例模式A;

public class SingletonPatternB {
	
     @SuppressWarnings("static-access")
	public static void main(String args[]){
    	 
    	 new  Emperor2().getInstance().emperorInfo();
		 
     }
}

class Emperor2 {
	
	private static Emperor2  emperor2=null; 
	
	Emperor2(){}
	
	@SuppressWarnings("static-access")
	public  Emperor2 getInstance(){
		if(this.emperor2 == null)                    //只有这儿和第一种不同
			this.emperor2 = new Emperor2();
		return this.emperor2;
	}
	
	public static void emperorInfo(){
		System.out.println("我是皇帝某某···");
	}
}


//***********************************************************************
package 单例模式A;

public class SingletonPatternC {
	
	@SuppressWarnings("static-access")
	public static void main(String args[]){
		Emperor3 emperor3 = Emperor3.getInstance();
		emperor3.emperorInfo();
		
		Emperor3 emperor33 = Emperor3.getInstance();
		emperor33.emperorInfo();
		
		if(emperor3 == emperor33){
			System.out.print("他们是同一个对象!");
		}
	}
}

class Emperor3 {
	
	private static final Emperor3 emperor3 = new Emperor3();   //变化
	
	private Emperor3(){}
	
	public synchronized static Emperor3 getInstance(){  //防止并发 多线程问题
		return emperor3;
	}
	
	public static void emperorInfo(){
		System.out.println("我是皇帝某某···");
	}
}


//当然了,我们是推荐第三种的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


  • 大小: 24.5 KB
分享到:
评论

相关推荐

    高职院校Java程序设计课程中设计模式的教学设计与实施.zip

    例如,解释单例模式时,可以引导学生思考为什么需要一个全局唯一的实例,以及如何防止多线程环境下的并发问题。实践部分则需要让学生通过编写代码来实现这些模式,从而加深理解。 在实施教学时,可以采用以下策略:...

    Android学习路线

    此外,设计模式是提升代码质量和可维护性的关键,如单例模式、工厂模式、观察者模式等。阅读《Effective Java》和《Agile Software Development: Principles, Patterns, and Practices》两书能帮助你理解并运用这些...

    上机报告.zip

    - Chapter7:可能讲解软件设计模式,如工厂模式、单例模式、观察者模式等,或者介绍并发编程、网络编程等进阶主题。 Chapter5、Chapter4和Chapter8可能涵盖相似或递进的主题,具体内容需要查看文件内容才能详细解释...

    Java应用编程100例

    8. **第8章**:可能涵盖Java的高级特性和设计模式,如枚举类型,匿名内部类,反射,动态代理,以及工厂模式、单例模式等常见设计模式的应用。 9. **第9章**:可能讲解Java的数据库操作,如JDBC(Java Database ...

    金字塔java入门程序

    8. **设计模式**:设计模式是解决常见编程问题的模板,比如单例模式、工厂模式等。虽然不是Java语言本身的一部分,但熟悉它们能帮助写出可维护、可扩展的代码。 9. **Java API**:Java标准库(Java API)提供了丰富...

    Core Java应用程序设计教程2

    - **设计模式:** 单例模式、工厂模式、观察者模式等经典设计模式的应用。 - **性能优化:** 如何编写高效且易于维护的代码。 - **单元测试:** JUnit等工具的使用,保证代码质量。 #### 三、学习路径建议 1. *...

    DaggerTest 学习Demo

    本资源"**DaggerTest**"是基于CSDN文档《带你从零开始进入Dagger2的世界》的实践示例,旨在通过9个逐步递进的实例,帮助开发者深入理解和掌握Dagger2的核心概念与用法。 1. **依赖注入基础** 依赖注入(Dependency...

    Sistema-Bancario-Atividade-4_parte_4

    不过可以推测,"Atividade-4_parte_4"可能是一个逐步递进的系列任务,旨在让学生或开发者掌握银行系统开发的关键技术,例如账户管理、交易处理、安全性等。 【标签】"Java"表明项目是用Java语言编写的。Java是一种...

    modul05_task01

    这暗示着这是一个逐步递进的学习路径,每个模块可能涵盖不同的主题,而task01和task05代表了不同阶段的学习成果。"master"分支通常用于存储项目的主版本或最新稳定代码,意味着这里包含的是整个任务的主版本或完成版...

    First_Java25

    【描述】"第一_Java25" 进一步确认了这个资源是针对Java初学者的系列教程,可能包含了25个不同的主题,这些主题可能是逐步递进的,旨在帮助学习者系统地理解和掌握Java语言的基础。 【标签】"Java" 明确了讨论的...

    CollegeJava:编程二作业

    因此,"CollegeJava"很可能是针对Java编程语言的一个系列实践练习,这次是“编程二作业”,暗示之前可能已经完成了“编程一作业”,逐步递进地深化学习。 在Java编程中,学生可能会接触到以下几个核心知识点: 1. ...

    PIJcw2:PiJ 课程作业 2

    【描述】"cw2 PiJ 课程作业 2" 简单地确认了这个项目是课程的第二个作业,可能与第一份作业有所关联,或者逐步递进地涵盖了更复杂的编程概念和技术。 【标签】"Java" 显示这个作业是关于Java编程语言的。Java是一种...

Global site tag (gtag.js) - Google Analytics