版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013317445/article/details/82782714
单例模式保证一个类只有一个实例,并提供一个访问它的全局访问点。
如何保证类在内存中只有一个对象呢?
把构造方法私有化;
在类里面自己创建一个对象;
通过一个公共的方法提供访问。
单例模式分为:饿汉式和懒汉式。
饿汉式单例模式
类一加载就创建对象。
Runtime类就采用了饿汉式。
public class Child {
private String name;
private char gender;
//私有化构造方法
private Child(){
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
//直接自己造一个对象
//下面getChilds是静态方法,静态方法只能访问静态变量,so加static
//为了不让外界直接访问修改这个值,加private
private static Child child= new Child();
//提供公共的访问接口
//为了使外界能够直接使用该方法,加静态
public static Child getChild(){
return child;
}
}
public class ChildDemo {
public static void main(String[] args){
Child child1= Child.getChild();
Child child2= Child.getChild();
System.out.println(child1);//Child2@1b6d3586
System.out.println(child2);//Child2@1b6d3586
//看看是不是同一个孩子:是的
System.out.println(child1==child2);//true
child1.setName("圆圆");
System.out.println(child1.getName());
}
}
懒汉式单例模式
public class Child2 {
private String name;
private char gender;
//私有化构造方法
private Child2(){
}
//先声明了一个child
private static Child2 child= null;
//synchronized: 防止线程安全出问题
public synchronized static Child2 getChild(){
//在用的时候才创建
if(child ==null){
child= new Child2();
}
return child;
}
public class ChildDemo2 {
public static void main(String[] args) {
Child2 child1 = Child2.getChild();
Child2 child2 = Child2.getChild();
System.out.println(child1);//Child2@1b6d3586
System.out.println(child2);//Child2@1b6d3586
//看看是不是同一个孩子:是的
System.out.println(child1 == child2);//true
}
}