[디자인 패턴] Bridge 패턴

이멀젼씨

·

2020. 3. 12. 13:37

- 정의

 

구현으로부터 추상레이어(기능)를 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다

 

즉, 구현과 기능을 분리하여 구현한다

 

- UML

 

1. Making인테스페이스를 만들고 이를 구현하는 MakingApartment와 MakingVilla클래스를 만든다.

2. House추상클래스를 만들고 이를 상속하는 Apartment와 Villa클래스를 만든다

 

 

- 코드

 

Making interface

public interface Making {

	public void buildSkeleton();
	public void cementWall();
}

MakingApartment class

public class MakingApartment implements Making{
	@Override
	public void buildSkeleton() {
		System.out.println("아파트 뼈대 짓기");
	}
	@Override
	public void cementWall() {
		System.out.println("아파트 벽에 시멘트 바르기");
	}
}

MakingVilla class

public class MakingVilla implements Making{
	@Override
	public void buildSkeleton() {
		System.out.println("빌라 뼈대 짓기");
	}
	@Override
	public void cementWall() {
		System.out.println("빌라 벽에 시멘트 바르기");
	}
}

House abstract class

public abstract class House {

	private Making making;
	
	public House(Making making) {
		this.making = making;
	}
	
	public void buildSkeleton() {
		making.buildSkeleton();
	}
	
	public void cementWall() {
		making.cementWall();
	}
	
	public abstract void make();

}

Apartment class

public class Apartment extends House {
	
	public Apartment(Making making) {
		super(making);
	}
	
	@Override
	public void make() {
		System.out.println("이 건물은 아파트 입니다");
	}

}

Villa class

public class Villa extends House {
	
	public Villa(Making making) {
		super(making);
	}
	
	@Override
	public void make() {
		System.out.println("이 건물은 빌라 입니다");
	}

}

Main class

public class Main {
	public static void main(String[] args) {
		House apartment = new Apartment(new MakingApartment());
		House villa = new Villa(new MakingVilla());
		
		apartment.buildSkeleton();
		apartment.cementWall();
		apartment.make();
		
		villa.cementWall();
		villa.buildSkeleton();
		villa.make();
	}
}

 

- 설명

구현부와 추상레이어를 분리하여 클래스의 계층 구조를 파악하기 쉽게 만들었다

 

장점

- 결합도를 낮춰 프로그램의 확장이 편리해짐

 

 

 

 

Strategy패턴과 유사해 보이지만 차이점이 있다

 

Strategy패턴

전략이 빈번히 변경되거나 구현이 여러개 존재할 경우 사용

구현부의 잦은 교체를 고려한 패턴

 

Bridege패턴

구현과 추상레이어를 분리시켜 서로간의 의존성을 낮추는 경우에 사용

계층 분리에 초점이 맞춰짐

계층간의 의존성을 낮추는데 목적이 있음