单例模式P51

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.类名开头字母大写

猜你喜欢

转载自www.cnblogs.com/NewValen/p/9228510.html