java中有23种设计模式
单例设计模式
解决一个类在内存中只存在一个对象。
如何保证对象唯一?
思想
1.为避免其他程序过多建立该类对象,先禁止其他程序建立该类对象;
2.为了让其他程序可以访问到该类对象, 只好在本类中自定义一个对象;
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
实现
1.将构造函数私有化;
2.在类中创建一个本类对象;
3.提供一个方法可以获取到该对象。
(对于事物该怎么描述还怎么描述,当需要该事物的对象保证在内存中唯一时,就将以上的三步加上即可)
public class Demo
{
public static void main(String[] args)
{
Student s1 = Student.getInstance();
Student s2 = Student.getInstance();
System.out.println(s1.getAge());//0
System.out.println(s2.getAge());//0
s1.setAge(11);
System.out.println(s2.getAge());//11
}
}
//饿汉式:先初始化对象 Student类一进内存,就已经创建好了对象
class Student
{
private int age;
private Student(){}//私有化构造函数
static Student s = new Student();//在类中创建一个本类对象
public static Student getInstance()//提供一个方法可以获取到该对象
{
return s;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
/*//懒汉式:对象是方法被调用时才初始化,也叫作对象的延时加载;
//Student类进内存,对象还没存在,只有调用了getInstance方法时,才建立对象。
class Student
{
private int age;
private Student(){}//私有化构造函数
static Student s = null;//在类中创建一个本类对象
public static Student getInstance()//提供一个方法可以获取到该对象
{
if(s == null)
{
synchronized(Student.class)
{
if(s == null)
s = new Student();
}
}
return s;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}*/
饿汉式(常用,安全且简单):