본문 바로가기

코딩/Software Architecture

[GoF Design Pattern] Singleton, Bridge, Template, Adapter

* Singleton 패턴

Singleton 패턴: 하나의 클래스 타입에 대해서 오직 하나의 객체만 생성되도록 보장되는 패턴

클래스를 아래와 같이 선언해 사용할 수 있다. 해당 클래스가 필요할 땐 getInstance로 받아와 사용!

 

Public class King {
    private King() {}
    
    private static King self = null;
    
    public static King getInstance() {
    	if(self == null){
        	self = new King();
        }
        return self;
    }

 

* Bridge 패턴

Bridge 패턴: 기능 계층과 구현 계층의 분리로 시스템의 확장성과 유지보수성을 높이는 패턴

Draft, Publication : 기능 계층

Display, SimpleDisplay, CaptionDisplay : 구현 계층

Draft, Display 의 관계 : Bridge 패턴

MVC 패턴에서 M과 V과 구분되는 것과 비슷한 패턴인 것 같다. 그것의 아주 초기단계?

 

*Template 패턴

Template 패턴 : 기능에 대해 실행되어야 할 각 단계에 대한 순서만 정해두고, 세부 구현은 상황에 맞게 다르게 구현할 수 있도록 하는 패턴

템플릿 선언, 템플릿 구현 을 각각 구현, 템플릿 구현에서 상황에 맞도록 구체적으로 구현.

동일한 형태의 작업을 하는데, 상황에 따라 다른 경우 적용할 수 있을 것 같다.

출력하는 방식을 바꿀때? 지금 당장 적용할 수 있는 게 떠오르진 않는다.

 

* Adapter 패턴

Adapter 패턴: 클래스 사용시 클래스에 대한 코드 변경 안 하고 원하는 형태로 변환해 사용하는 패턴

- Adapter의 한 예시 :

public class TigetAdapter extends Animal {
    private Tiger tiger;
    
    public TigerAdapter (String name) {
    	super(name);
    
    	tiger = new Tiger();
    	tiger.setName(name);
    }
    
    @Override
    public void sound() {
    	System.out.println("tiger.getName() + " ");
        tiger.roae();
    }