1.概念
/**
* 如何保证对象唯一性呢?
* 1.不允许其他程序用new创建该类对象(避免产生更多对象)。
* 2.在该类中创建一个本类实例
* 3.对外提供一个方法让其他程序可以获取该对象
* (关键词:程序 对象 类)
*
* 步骤:1.私有化该类构造函数
* 2.通过new在本类中创建一个本类函数
* 3.定义一个共有的方法,将创建的对象返回
* (关键词:构造函数,本类函数,对象)
* 如果你想保证类的唯一性,就把这三句话往这一加,就ok了
* */
2.演示
class Single{
static Single s = new Single(); //2.创建一个本类,私有并静态的对象
private Single() {} //1.私有化该类构造函数
public static Single getInstance() { //3.提供一个共有的方法,将创建的对象返回
return s;
}
}
class SingleDemo{ //类名开头字母大写
public static void main(String[] args) {
Single ss = Single.getInstance(); //获取了Single类的实例。 getInstance方法返回s,s=Single=ss
//Single ss = Single.s; s=Single=ss,但不可控
}
}
3.单例模式简单应用
class Single{
static Single s = new Single(); //2.创建一个本类,私有并静态的对象
private Single() {} //1.私有化该类构造函数
public static Single getInstance() { //3.提供一个共有的方法,将创建的对象返回
return s;
}
}
/*数列单例模式的简单应用*/
class SingleDemo{
public static void main(String[] args) {
SingleDemo s1 = SingleDemo.getInstance();
SingleDemo s2 = SingleDemo.getInstance();
System.out.println(s1==s2);
//Single ss = Single.s;
// Test t1 = new Test();
// Test t2 = new Test();
Test t1 = Test.getInstance();
Test t2 = Test.getInstance(); //对象不是new来的,是我获取来的
t1.setNum(10); //第一次对这个对象num值的改变是10
t2.setNum(20); //第二次同一个对象10改成20 了
System.out.println(t1.getNum());
System.out.println(t2.getNum());
}
class Test {
private int num;
private static Test t = new Test(); //三步骤
private Test() {};
public static Test getInstance() {
return t;
}
public int getNum() { //get and set
return num;
}
public void setNum(int num) {
this.num = num;
}
}
//运行完毕 ture 20 20
因为:第一次对这个对象num值的改变是10
第二次同一个对象10改成20 了
如果你想保证类的唯一性,就把这三句话往这一加,就ok了
4.P51 知识点
1.概念
2.不能创建对象,还要去获取对象,被调用两种方法:①对象调用 ②类名调用(有前提:静态。而静态访问的内容必须是静态的)
3.我们一般不会把成员变量暴露出去,是为了可控
4.类名开头字母大写