Java/Java

싱글 톤, 템플릿 메서드 패턴

DDG9 2024. 4. 30. 10:15

싱글 톤 패턴

 

package useful.ch04;

/**
 * 디자인 패턴 살펴보기
 * - 싱글톤 패턴이 뭘까?
 * 1. 생성자를 private 으로 만든다
 * 2. static 변수를 활용해서 내부에서 객체를 생성하고 주소값을 할당
 * 3. 외부에서 유일하게 참조할 수 있는 public 메서드를 제공한다
 */

public class Company {

	// 2. static 변수 활용 데이터 타입 선언
	private static Company company;

	// 1. 생성자의 접근제어 지시자를 private 으로 변경하면
	// 외부에서 기본 생성자를 호출 할 수 없다.
	private Company() {}

	// 3. 외부에서 접근 가능한 메서드를 만들어 준다.
	public static Company getInstance() {
		if (company == null) {
			company = new Company();
		}
		return company;
	}
}
package useful.ch04;

public class CompanyTest {

	public static void main(String[] args) {
		
		// 생성불가
		//Company company = new Company();
		// 고민! Company 객체를 어떻게 접근 할 수 있을까?
		
		// A클래스에서 활용
		Company company = Company.getInstance();
		System.out.println(company);
		
		// B클래스에서 활용
		Company company2 = Company.getInstance();
		System.out.println(company2);
	}
}

 

 

템플릿 메서드 패턴

 

package useful.ch04;

public abstract class Car {

	void startCar() {
		System.out.println("시동을 켭니다");
	}
    
	abstract void drive();
	abstract void stop();

	void turnOff() {
		System.out.println("시동을 끈다");
	}

	// 메서드 앞에 final 키워드를 사용한다면 : 하위 클래스에서 재정의 할 수 없다.
	final void run() {
		startCar();
		drive();
		stop();
		turnOff();
	}
}
package useful.ch04;

public class AiCar extends Car {

	@Override
	void drive() {
		System.out.println("AI car 자율주행을 합니다");
		System.out.println("스스로 방향을 바꿉니다");
	}

	@Override
	void stop() {
		System.out.println("자동으로 자동차를 멈춥니다");
		System.out.println("위험을 감지해서 급제동을 합니다");
	}
}
package useful.ch04;

import exercise.test01.C;

public class ManualCar extends Car {

	@Override
	void drive() {
		System.out.println("사람이 운전을 합니다");
	}

	@Override
	void stop() {
		System.out.println("브레이크를 밟습니다");
	}
}
package useful.ch04;

public class CarMainTest {

	public static void main(String[] args) {

		Car aiCar = new AiCar(); // 다형성, 업캐스팅된 상태
		// 프로그램을 실행시키기 위해서 run() 메서드를 호출해야 한다고 약속했다면
		aiCar.run();

		System.out.println("------------------------------------");

		Car manualCar = new ManualCar();
		manualCar.run();
	}
}

'Java > Java' 카테고리의 다른 글

스레드 ( Thread )  (0) 2024.05.01
최솟값, 최댓값 및 위치 구하기  (0) 2024.04.30
Exception ( 예외처리 )  (0) 2024.04.29
String, StringBuffer 클래스  (0) 2024.04.26
Object 클래스  (0) 2024.04.25