单例模式参考文档:https://www.runoob.com/design-pattern/singleton-pattern.html
单例模式是static的应用场景,指:一个类只能产生一个实例
单例模式的应用场景:工具类一般都是单例模式
引申:什么是实例:https://blog.csdn.net/qq_43663024/article/details/103937611
单例设计模式的实现方式:
创建一个类,满足以下条件:
构造器私有(private);用一个私有(private)、静态(static) 的变量引用实例;提供一个共有 (public)、静态(static) 的方法获得实例
代码:
类的定义:
public class TestSingleton { //提供一个私有的、静态的变量引用实例,(引用变量为 私有、静态的) private static TestSingleton testSingleton; protected int aa =10; public String name = "zxc"; private String tag = "222"; //构造器私有 private TestSingleton(){ System.out.println("私有构造器"); } //提供一个公有、静态方法获得实例 public static TestSingleton getTestSingleton(){ if (testSingleton ==null){ testSingleton = new TestSingleton(); } return testSingleton; } }
实例化:
public class InitialSingletonTest { public static void main(String[] args) { // 不能通过这种强引用的方法新建实例,因为构造器方法是private的 // TestSingleton testSingleton = new TestSingleton(); TestSingleton t1= TestSingleton.getTestSingleton(); // 一个类只能创建一个实例 TestSingleton t2= TestSingleton.getTestSingleton(); // t1 和 t2 其实是一个实例 System.out.println(t1==t2); // name是public的,可以在任何地方访问 t1.name="dd"; // aa是protected的,可以在包中访问 t1.aa= 2; // tag是private的,只能在类中访问,否则会报错 // t1.tag="222"; System.out.println(t2.aa); } }