单例模式是什么鬼?
顾名思义,只有一个实例。
首先写一个类,将类的构造函数写为私有的,并写一个静态的变量(最好是私有的)并指向null
private static SingleDemo me = null;
写一个公开的静态方法(能直接在外部类被Self所调用),用于创建实例
public static SingleDemo creatDemo()
public static SingleDemo creatDemo(){
if(me == null) me = new SingleDemo();
return me;
}
大体代码
public class SingleDemo {
private static SingleDemo me = null;
public int count=0;
private SingleDemo() {
count++;
}
//思考:单例模式为何需要返回
public static SingleDemo creatDemo() {
if(me == null) me=new SingleDemo();//单例模式重点,保证所有对象创建的是同一个实例
return me;
}
}
public class SingleTest {
public static void main(String[] args) {
// SingleDemo s1 = new SingleDemo();
SingleDemo s1 = SingleDemo.creatDemo();
SingleDemo s2 = SingleDemo.creatDemo();
System.out.println(s1.count);
s1.count++;
System.out.println(s2.count);
System.out.println(s1==s2);//true
}
}
思考:
- 单例模式创建多个对象时指向几个实例? 一个
- 如果是单列模式,两个对象使用==判断是否为真?是
- 单列模式如何实现?在上述例子中以静态变量me作为flag,如果me为null,则new一个对象,然后返回,否则直接返回,即返回首次new的“地址”(哈希码)