Jay's Blog

디자인 패턴 정리
GOF(Gang of Four) 디자인 패턴들


GoF(Gang of Four)에서는 23가지 디자인 패턴을 3가지 유형으로 분류합니다.

A. Creational Pattern

B. Structural Pattern

C. Behavioral Pattern


주요 디자인 패턴만 정리했습니다.

1. 어댑터 패턴(Adapter Pattern)

2. 프로토 타입 패턴(Prototype Pattern)

3. 싱글톤 패턴(Singleton Pattern)

4. 컴포지트 패턴(Composite Pattern)

5. 데코레이터 패턴(Decorator Pattern)

6. 퍼사드 패턴(Facade Pattern)

7. 프록시 패턴(Proxy Pattern)

8. 옵저버 패턴(Observer Pattern)

public interface Observer {
	public abstract void update(NumberGenerator generator);
}
import java.util.Vector;
import java.util.Iterator;

public abstract class NumberGenerator {
	private Vector observers = new Vector(); // Observer들을 보관

	public void addObserver(Observer observer) { // Observer를 추가
		observers.add(observer);
	}

	public void deleteObserver(Observer observer) { // Observer를 삭제
		observers.remove(observer);
	}

	public void notifyObservers() { // Observer에 통지
		Iterator it = observers.iterator();
		while (it.hasNext()) {
			Observer o = (Observer) it.next();
			o.update(this);
		}
	}

	public abstract int getNumber(); // 수를 취득한다.

	public abstract void execute(); // 수를 생성한다.
}
import java.util.Random;

public class RandomNumberGenerator extends NumberGenerator {
	private Random random = new Random(); // 난수발생기
	private int number; // 현재의 수

	public int getNumber() { // 수를 취득한다.
		return number;
	}

	public void execute() {
		for (int i = 0; i < 20; i++) {
			number = random.nextInt(50);
			notifyObservers();
		}
	}
}
public class DigitObserver implements Observer {
	public void update(NumberGenerator generator) {
		System.out.println("DigitObserver:" + generator.getNumber());
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
		}
	}
}
public class GraphObserver implements Observer {
	public void update(NumberGenerator generator) {
		System.out.print("GraphObserver:");
		int count = generator.getNumber();
		for (int i = 0; i < count; i++) {
			System.out.print("*");
		}
		System.out.println("");
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
		}
	}
}
public class Main {
	public static void main(String[] args) {
		NumberGenerator generator = new RandomNumberGenerator();
		Observer observer1 = new DigitObserver();
		Observer observer2 = new GraphObserver();
		generator.addObserver(observer1);
		generator.addObserver(observer2);
		generator.execute();
	}
}

9. 커맨드 패턴(Proxy Pattern)

10. 책임 연쇄 패턴(Chain of Responsibility Pattern)

11. 중재자 패턴(Mediator Pattern)

12. 방문자 패턴(Visitor Pattern)

13. 팩토리 메소드 패턴(Factory Method Pattern)

*****
Written by Jay on 12 June 2017