이 글은 Java 싱글턴 모드의 예시에 대한 자세한 설명에 대한 관련 정보를 주로 소개합니다. 이 부분을 완전히 이해하고 익히는 데 도움이 되기를 바랍니다. java 싱글턴 모드
개념:
싱글턴 패턴은 Java의 일반적인 디자인 패턴으로 게으른 스타일 싱글턴, 배고픈 스타일 싱글턴, 등록 스타일 싱글턴의 세 가지 유형이 있습니다.
싱글턴 패턴의 특징은 다음과 같습니다.
1. 싱글턴 클래스는 하나의 인스턴스만 가질 수 있습니다.
2. 싱글톤 클래스는 고유한 인스턴스를 생성해야 합니다.
싱글톤 패턴은 클래스에 인스턴스가 하나만 있도록 보장하고 자체적으로 인스턴스화하며 이 인스턴스를 전체 시스템에 제공합니다. 컴퓨터 시스템에서 스레드 풀, 캐시, 로그 개체, 대화 상자, 프린터 및 그래픽 카드 드라이버 개체는 종종 싱글톤으로 설계됩니다. 이러한 응용 프로그램은 모두 리소스 관리자의 기능을 어느 정도 갖추고 있습니다. 각 컴퓨터에는 여러 대의 프린터가 있을 수 있지만 두 개의 인쇄 작업이 동시에 프린터로 출력되는 것을 방지하기 위해 프린터 스풀러는 하나만 있을 수 있습니다. 각 컴퓨터에는 여러 개의 통신 포트가 있을 수 있으며, 하나의 통신 포트가 동시에 두 개의 요청에 의해 호출되는 것을 방지하기 위해 시스템은 이러한 통신 포트를 중앙에서 관리해야 합니다. 간단히 말해서, 싱글톤 모드를 선택하는 목적은 일관성 없는 상태를 피하고 장기적인 정책을 피하는 것입니다.
public class Singleton { private static Singleton uniqueInstance = null; private Singleton() { // Exists only to defeat instantiation. } public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } // Other methods... }
Singleton은 생성자를 비공개로 제한하여 클래스가 외부에서 인스턴스화되는 것을 방지합니다. 동일한 가상 머신 범위 내에서 Singleton의 유일한 인스턴스는 getInstance() 메서드를 통해서만 액세스할 수 있습니다. (실제로 Java 리플렉션 메커니즘을 통해 전용 생성자로 클래스를 인스턴스화하는 것이 가능하며, 이는 기본적으로 모든 Java 싱글톤 구현을 무효화합니다. 이 문제는 여기서 논의하지 않습니다. 리플렉션 메커니즘이 존재하지 않는다고 가정하겠습니다. )
public class TestStream { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } //该类只能有一个实例 private TestStream(){} //私有无参构造方法 //该类必须自行创建 //有2种方式 /*private static final TestStream ts=new TestStream();*/ private static TestStream ts1=null; //这个类必须自动向整个系统提供这个实例对象 public static TestStream getTest(){ if(ts1==null){ ts1=new TestStream(); } return ts1; } public void getInfo(){ System.out.println("output message "+name); } } /** * */ public class TestMain { public static void main(String [] args){ TestStream s=TestStream.getTest(); s.setName("张孝祥"); System.out.println(s.getName()); TestStream s1=TestStream.getTest(); s1.setName("张孝祥"); System.out.println(s1.getName()); s.getInfo(); s1.getInfo(); if(s==s1){ System.out.println("创建的是同一个实例"); }else if(s!=s1){ System.out.println("创建的不是同一个实例"); }else{ System.out.println("application error"); } } }
작업 결과:
张孝祥 张孝祥 output message 张孝祥 output message 张孝祥 创建的是同一个实例
결론
1. 배고픈 싱글턴 클래스
//饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 { //私有的默认构造子 private Singleton1() {} //已经自行实例化 private static final Singleton1 single = new Singleton1(); //静态工厂方法 public static Singleton1 getInstance() { return single; } }
2. 게으른 스타일의 싱글턴 클래스
//懒汉式单例类.在第一次调用的时候实例化 public class Singleton2 { //私有的默认构造子 private Singleton2() {} //注意,这里没有final private static Singleton2 single=null; //静态工厂方法 public synchronized static Singleton2 getInstance() { if (single == null) { single = new Singleton2(); } return single; } }
3. 으아악
위 내용은 Java 싱글톤 패턴의 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!