由static引出单例模式

单例模式的特点:保证在整个应用程序中只存在一个对象
单例模式的步骤:
1.把构造方法私有化,这样就能够保证只有本类能够创建本类的对象。(保证了本类只能创建本类的一个对象,外界不能创建本类的对象)
2.把需要共享的属性或者方法写成静态的,目的是供外界调用。但是当需要共享的属性和方法过多的时候,就会产生代码冗余,因此最好的办法就是直接把此类声明成静态的变量。
3.构造方法已经写好了,此时要做的就是创建对象了。用new关键字创建对象,把这个对象传给一个引用类型的变量private static Single s = new Single(),之所以要把这个对象赋值给一个引用类型的变量,是为了要用变量的static关键字。此时把这个对象共享了。此时外界可以用类名去调用这个类了,但是调用的也是这个类的静态方法(因为该类的对象是静态的,因此该类的对象调用方法的时候,也必须调用静态的方法),因此此时写一个静态方法供外界调用。public static Single getInstance() {return s;}
(外界虽然不能创建本类的对象,但是可以调用本类对象中的静态方法)
----------以下是代码:
public class Single
{
/**
             例如程序员在电脑上下载文件,公司的所有程序员要用这个文件,但是没必要每个人都下载。只要有一个人下载,其他人用就行了


要求:只存在该类的一个对象

1 将构造函数私有化(这样的目的是只有本类自己能够产生我自己的对象,别人不能创建我。也就是说别人无法下载)
2 自己给创建对象  ()
3 提供公共static方法获得该类的对象

**/
private String str="";

private static Single s = new Single();//2.别人不能创建这个类的对象,那我自己给自己创建对象
private Single()//1.这个类的对象不能随便创建,只能本类创建
{

}
public static Single getInstance()//3.获取私有属性的值,用属性Single 的get方法,方法名字是实例的意思
{
return s;
}



public String getStr()
{
return this.str;
}
public void setStr(String str)
{
this.str=str;
}

public void read()
{
this.str="只存在该类的一个对象,下载文件";
}

}




---外界调用过程
public class SingleTest 
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();//实例化
s1.read();  //通过read方法,把值保存在属性str中了。
String str=s1.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str="+str);//输出

Single s2 = Single.getInstance();//实例化
//s2.read();  //通过read方法,把值保存在属性str中了。
String str2=s2.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str2="+str2);//输出
s2.setStr("111111111111111");//设置str值

Single s3 = Single.getInstance();//实例化
//s3.read();  //通过read方法,把值保存在属性str中了。
String str3=s3.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str3="+str3);//输出
}
}

猜你喜欢

转载自1601844782.iteye.com/blog/2258392
今日推荐