方法被调用要么 对象调用(new),要么类名调用 要使用类调用: 那么被调用方法和成员都必须是静态的 通过方法访问成员,那么成员不对外公开,属性私有化 模式一: /* 设计模式:解决某一类问题最行之有效的方法 java中23种设计模式之: 单例设计模式:解决一个类在内存中只存在一个对象 想要保证对象的唯一: 1.为了避免其他程序过多建立该对象,先进制其他程序建立该类对象 2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象 3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式 这三部怎么用代码体现? 1.将构造函数私有化 2.在类中创建一个本类对象 3.提供一个方法可以获取该对象 对于事物该怎么描述,还怎么描述 当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可 */ class Single { private int num; public void setNum(int num) { this.num = num; } public int getNum() { return num; } private Single(){} //1.第一步 //Single(){} private static Single s = new Single(); //类名调用要静态 //2.第二步 public static Single getInstance()//类名调用要静态//3.第三步 { return s; } } class SingleDemo { public static void main(String[] args) { //Single s = Single.getInstance();//类名调用 //Single s1 = new Single(); //Single s2 = new Single(); //s1.setNum(30); //System.out.println(s2.getNum());//输出结果为0,因为new s1对象和new s2是不同对象 //下面通过单例模式调用,类调用指向了同一个对象;单例的好处 //Single s1 = Single.getInstance(); //Single s2 = Single.getInstance(); //s1.setNum(30); //System.out.println(s2.getNum()); } }
模式一总结: 先初始化对象, 称为:饿汉式: 最简单,开发使用 Single类一进内存,就已经创建对象,要给Single s初始化
模式二 //对象的方法调用时,才初始化。也叫对象的延迟加载;称为:懒汉式 //Single类进内存,对象还不存在,只有在调用getInstance方法时,才建立对象 class Single { private Single(){} //1.第一步 private static Single s = null; //类名调用要静态 //2.第二步 public static Single getInstance()//类名调用要静态//3.第三步 { //外层if判断,是判断是否拿锁的过程,锁定程序synchronized(Single.class) //内层判断,是判断后建立对象的过程 if(s==null) { synchronized(Single.class) { if(s==null) s= new Single(); } } return s; } }
总结:
开发时定义单例,建议使用饿汉式 |