看来楼主对于单例不是太清楚吧
- package com.itcast.first;
- class Person{
- private String name;
- private int age;
- //定义一个构造方法
- private static Person p = new Person("lisi", 20);
- private Person(){}
- private Person(String name,int age){
- this.name = name;
- this.age = age;
- }
- public static Person getPerson()
- {
- return p;
- }
- private void eat(){
- System.out.println("eat");
- }
- public String toString() {
// TODO Auto-generated method stub
return "name:"+this.name+"age"+this.age;
/* 覆写父类的toString()方法,默认的toString()返回的是
getClass().getName() + '@' + Integer.toHexString(hashCode())
*/
} - }
- public class Demo9 {
- public static void main(String[] args) {
- //Person p = new Person("lisi", 20);
- Person pp = Person.getPerson(); //这里得到的是Person默认的实例对象
- System.out.println(pp.toString());//覆写后调用自己写的toString()方法,这里不添加toString()方法也可以
- }
- }
关于单例模式重点在于:一旦把该类的构造器隐藏起来,则需要提供一个public方法作为该类的访问点,用于创建该类的对戏那个,且该方法必须使用static修饰(因为调用该方法之前还不存在对象,因此调用该方法的不可能是对象,只能是类)
单例模式代码:
class Singleton{
//使用一个变量来缓存曾经创建的实例
private static Singleton instance;
//将构造器使用private修饰,隐藏该构造器
private Singleton(){}
//提供一个静态方法,用于返回Singleton实例
//该方法可以加入自定义的控制,保证只产生一个Sinleton对象
public static Singleton getSingleton(){
//如果instance为null,表明还不曾创建Singleton对象
//如果instace不为null,则表明已经创建了Singleton对象
if(instance==null){
//创建一个Singleton对象,并将其缓存起来
instance=new Singleton();
}
return instance;
}
}
public class TestSingleton {
public static void main(String[] rgs){
Singleton s=Singleton.getSingleton();
}
}
|