1.掌握我们设计模式中的 6 大设计原则! 01.里氏替换 02.单一职责 03.依赖倒置 04.接口隔离 05.开闭原则 06.迪米特法则 java中有常用的23种设计模式! 单例模式: 01.在整个应用程序中,一个类只有一个实例对象! (之前我们一个类创建N个对象 原型/多例) 02.这个实例对象只能在本类中创建! 本类的构造方法私有化! 03.在类中创建一个供外部访问的接口,得到实例对象! 类创建就是需要别人访问的! 04.无论我们创建多少个对象实例,其实都是在操作同一个对象实例 实现单例类的步骤: 01.创建一个静态的需要设置成单例类的 属性! 02.私有化构造 03.创建一个供外部访问的接口 具体实现的方式: 01.懒汉式 02.饿汉式 03.双重锁
2.代码:
/**
* 懒汉式 实现 单例
*/
public class Student {
// 01.创建一个静态的需要设置成单例类的 属性!
private static Student student;
// 02.私有化构造
private Student() {
}
// 03.创建一个供外部访问的接口
public static synchronized Student getInstance() {
if (student == null) { // 判断对象是否有值
student = new Student();
}
return student;
}
private String name; // 姓名
private int age; // 年龄
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 测试方法
public static void main(String[] args) {
// 创建3个student对象
Student stu1 = Student.getInstance();
Student stu2 = Student.getInstance();
stu2.setName("小黑");
Student stu3 = Student.getInstance();
stu3.setAge(50);
System.out.println(stu1 == stu2);
System.out.println(stu2 == stu3);
System.out.println(stu1.getName());
System.out.println(stu1.getAge());
}
}
/**
* 饿汉式 实现 单例
*/
public class Student2 {
// 01.创建一个静态的需要设置成单例类的 属性!
private static Student2 student = new Student2();
// 02.私有化构造
private Student2() {
}
// 03.创建一个供外部访问的接口
public static synchronized Student2 getInstance() {
return student;
}
private String name; // 姓名
private int age; // 年龄
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 测试方法
public static void main(String[] args) {
// 创建3个student对象
Student2 stu1 = Student2.getInstance();
Student2 stu2 = Student2.getInstance();
stu2.setName("小黑");
Student2 stu3 = Student2.getInstance();
stu3.setAge(50);
System.out.println(stu1 == stu2);
System.out.println(stu2 == stu3);
System.out.println(stu1.getName());
System.out.println(stu1.getAge());
}
}
/**
* 双重锁 实现 单例
*/
public class Student3 {
// 01.创建一个静态的需要设置成单例类的 属性!
private static Student3 student;
// 02.私有化构造
private Student3() {
}
// 03.创建一个供外部访问的接口
public static synchronized Student3 getInstance() {
if (student == null) {
synchronized (Student3.class) {
if (student == null) {
student = new Student3();
}
}
}
return student;
}
private String name; // 姓名
private int age; // 年龄
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 测试方法
public static void main(String[] args) {
// 创建3个student对象
Student3 stu1 = Student3.getInstance();
Student3 stu2 = Student3.getInstance();
stu2.setName("小黑");
Student3 stu3 = Student3.getInstance();
stu3.setAge(50);
System.out.println(stu1 == stu2);
System.out.println(stu2 == stu3);
System.out.println(stu1.getName());
System.out.println(stu1.getAge());
}
}