Kotiln 단일 모드
1. 클래스 를 불 러 올 때 단리 자바 만 들 기
public class Config{
private static Config INSTANCE=new Config();
private Config(){
//
}
public static Config getInstance(){
return INSTANCE;
}
}
Kotlin 실현
object Config{}
위의 글 씨 는 간단 하고 거 칠 며, 클래스 를 불 러 올 때 직접 만 듭 니 다. 그러나 시작 프로 세 스 를 늦 출 수 있 습 니 다. 따라서 사용 할 때 다시 불 러 올 수 있 습 니 다. 예 를 들 어 아래 의 글 씨 를 사용 할 수 있 습 니 다.
2. 게 으 른 로 딩 문법 자바 구현
public class Config{
private static Config INSTANCE;
private Config(){
//
}
public static Config getInstance(){
if(null==INSTANCE){
INSTSANCE=new Config();
}
return INSTANCE;
}
}
Kotlin 실현
public class Config{
companion object{
val instance by lazy(LazyThreadSafetyMode.NONE){
Config()
}
}
}
게 으 른 로 딩 은 로 딩 클래스 를 만 드 는 것 을 피 할 수 있 지만 스 레 드 가 안전 하지 않 습 니 다. 여러 클래스 에서 단 리 를 얻 으 면 여러 개의 단 리 를 만 들 수 있 습 니 다. 따라서 단 리 를 만 들 때 라인 잠 금 을 추가 할 수 있 습 니 다. 예 를 들 어 다음 과 같은 방법 입 니 다.
3. 동기 화 잠 금 쓰기 자바 구현
public class Config{
private static Config INSTANCE;
private Config(){
//
}
public static synchronized Config getInstance(){
if(null==INSTANCE){
INSTANCE=new Config();
}
return INSTANCE;
}
}
Kotiln 실현
class Config{
companion object{
private var instance:Config?=null
@Synchronized
fun get():Config{
if(nnull==instance) instance=Config()
return instance
}
}
}
동기 화 잠 금 은 단리 가 중복 되 지 않도록 하지만 동기 화 잠 금
4. 이중 검증 쓰기 자바 구현
public class Config{
private static volatile Config INSTANCE;
private Config(){
//
}
public static Config getInstance(){
if(null==INSTANCE){
synchronized(Config.class){
if(null==INSTANCE){
INSTSANCE=new Config();
}
}
}
return INSTANCE;
}
}
Kotlin 실현
class Config{
companion object{
val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED){
Config()
}
}
}
5. 정적 내부 클래스 표기 법 은 클래스 를 불 러 올 때 단 리 를 초기 화 하 는 것 을 피 하 는 동시에 동기 화 잠 금 문 제 를 가상 컴퓨터 에 맡 기 는 것 이 가장 우아 한 표기 법 이 라 고 할 수 있 습 니 다. 자바 와 Kotlin 표기 법 은 거의 똑 같 습 니 다 자바 실현
public class Config{
private static class Helper{
private static Config INSTANCE=new Config();
}
private Config(){
//
}
public static Config getInstance(){
return Helper.INSTANCE;
}
}
Ktotiln 실현
class Config private constructor(){
companion object{
fun getInstance = Helper.instance
}
private object Helper{
val instance = Config()
}
}