문제제기

- 우리가 1장에서 만들었던 게임에 대해 다시 말해보자, 1장에서 우리는 Strategy Pattern을 써서, Class 별로 무기를 사용하는 행위(Attack)을 구현했엇다.

- Attack Strategy를 구현한 코드가 아래처럼 되어있다고 가정해보자,

public class AxeAttack implements AttackBehavior{
	String[] available = {"knight","mknight"};
	
	@Override
	public void attack(String className) throws Exception {
		if(Arrays.stream(available).anyMatch(className::equals)) {
			System.out.println("도끼 공격이다!!!");
		} else {
			throw new Exception("your name is " + className);
		}
	}
}

 

- 위 코드처럼 knight 클래스와 Macgic knight (마검사) 만 axe를 쓸 수 있도록 코딩되어있다.

public class Wizard extends Person{

	public Wizard(AttackBehavior attack) {
		this.className = "wizard";
		this.attackBehav = attack;
	}
}

- Wizard 클래스가 Axe를 쓰려고 하면 어떻게 될까?

 

 

- 위와같이 오류가 날 것이다. 그러면 어떻게 이 상황을 해결할 수 있을까?

 

어댑터 패턴 개요

- 위 문제를 Adapter 패턴을 통해 우리는 해결해 볼 수 있다.

 

-일단 어댑터 패턴이 무엇인지부터 살펴보면, 말그대로 중간에 어댑터(돼지코)를 둬서, 원래의 Object를 유럽플러그에서도 사용 할 수있게 만드는 것이다.

 

+ Recent posts