싱글톤 패턴과 템플릿 메소드 패턴에 대해 알아보겠습니다. 싱글톤 패턴은 애플리케이션 내에서 특정 인스턴스가 하나만存在하도록 보장하는 패턴으로, '곤한 모드'와 '锇은 모드'로 나뉩니다. 두 모드의 차이점은锇은 모드가 인스턴스를 명시적으로 제공하지 않는다는 점입니다.
- 곤한 모드: 이 모드에서는 클래스 내부에서 인스턴스를 직접 생성하고, 외부에서 인스턴스를 얻기 위해 메서드를 제공합니다.
public class Singleton {
private Singleton() {
}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
- 锇은 모드: 이 모드에서는 인스턴스를 지연 생성합니다.
public class LazySingleton {
private LazySingleton() {
}
private static LazySingleton instance;
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
테스트:
public class Test {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
if (singleton1 == singleton2) {
System.out.println("두 객체가 동일합니다.");
} else {
System.out.println("두 객체가 달라합니다.");
}
LazySingleton lazy1 = LazySingleton.getInstance();
LazySingleton lazy2 = LazySingleton.getInstance();
if (lazy1 == lazy2) {
System.out.println("두 객체가 동일합니다.");
} else {
System.out.println("두 객체가 달라합니다.");
}
}
}
템플릿 메소드 패턴: 템플릿 메소드 패턴은 특정 알고리즘의 구조를 정의하면서 일부 세부사항을 추상화합니다. 예를 들어 음료기의 경우, 커피와 녹차这两种 음료를 만들 수 있습니다.
- 음료기 클래스:
public abstract class DrinkMachine {
public void boilWater() {
System.out.println("물 끓이기");
}
public abstract void brew();
public void pourDrink() {
System.out.println("음료를컵에 담기");
}
public abstract void addIngredients();
}
- 커피 기계 클래스:
public class CoffeeMachine extends DrinkMachine {
public void addIngredients() {
System.out.println("우유 추가");
}
public void brew() {
System.out.println("커피 끓이기");
}
}
- 녹차 기계 클래스:
public class TeaMachine extends DrinkMachine {
public void addIngredients() {
System.out.println("柠檬 추가");
}
public void brew() {
System.out.println("차 끓이기");
}
}
테스트:
public class Test {
public static void main(String[] args) {
DrinkMachine coffeeMachine = new CoffeeMachine();
coffeeMachine.boilWater();
coffeeMachine.brew();
coffeeMachine.pourDrink();
coffeeMachine.addIngredients();
System.out.println("************************");
DrinkMachine teaMachine = new TeaMachine();
teaMachine.boilWater();
teaMachine.brew();
teaMachine.pourDrink();
teaMachine.addIngredients();
}
}