A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高廷平 中级黑马   /  2012-9-28 21:18  /  1109 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class MyTest02
{
public static void main(String[] args)
{
  /* TestA ta=new TestA(); //这是错误的,构造函数已经被私有化了*/
  
  TestA ta1=TestA.getTestA();/* 通过getXxx方法获的TestA类的对象ta1 */
  ta1.show();
  
  TestA ta2=TestA.getTestA();/* 通过getXxx方法获的TestA类的对象 ta2*/
  System.out.println(ta1==ta2);/* ==比较的是对象的地址  这里验证ta1 ta2指向同一个对象 输出: true*/
}
}

//单例模式的实现:非延迟式  开发建议的使用形式
class  TestA
{
private  TestA()/* 私有化构造函数 */
{
  
}

private static TestA  tt=new TestA();  /*实例化一个私有的,静态的(必须的,因为:静态方法无法访问外边的非静态成员)对象tt*/

public static TestA getTestA()/*给外界提供一个静态的(这是必须的,因为构造函数私有化了)*/
{
  return tt;
}

//功能方法
void show()
{
  System.out.println("这是一个非延迟式的单例设计模式实例");
}
}

//单例模式的实现:延迟式  
class  TestB
{
private  TestB()/* 私有化构造函数 */
{
  
}

private static TestB  tt;  /*  只是声明一个TestA类的引用tt,静态的(必须的,因为:静态方法无法访问外边的非静态成员)*/

public static TestB getTestB()/*给外界提供一个静态的(这是必须的,因为构造函数私有化了)*/
{
  if(tt!=null)
  {
    /*如果tt不是空引用,创建对象*/
   tt=new TestB();
  }
  return tt;
}

//功能方法
void show()
{
  System.out.println("这是一个延迟式的单例设计模式实例");
}
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 希望在总结同学,能提出自己问题与见解,同.

查看全部评分

1 个回复

倒序浏览
你可以用一個枚舉類來進行單例設計

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 欢迎总结枚举单例!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马