디자인 패턴/구조

가교 패턴

sdafdq 2022. 11. 21. 13:59

코드 먼저 보겠다.

interface Weapon{
    public void handle();
}

class Wand implements Weapon{
    public void handle(){
        System.out.println("Wide area attack");
    }
}

class Sword implements Weapon{
    public void handle(){
        System.out.println("Sword attack");
    }
}

class Bible implements Weapon{
	public void handle(){
    	System.out.println("Heal");
    }
}



interface JobActive{
    public void active();
}

class Warrior implements JobActive{
    private Weapon weapon;
    public Warrior(Weapon weapon){
        this.weapon = weapon;
    }

    public void active(){
        System.out.print("Warrior ");
        weapon.handle();
    }
}

class Mage implements JobActive{
    private Weapon weapon;
    public Smith(Weapon weapon){
        this.weapon = weapon;
    }

    public void active(){
        System.out.print("Mage ");
        weapon.handle();
    }
}

class Prist implements JobActive{
    private Weapon weapon;
    public Smith(Weapon weapon){
        this.weapon = weapon;
    }

    public void active(){
        System.out.print("Prist ");
        weapon.handle();
    }
}

기능 부와 구현부를 나누는.. 그냥 인터페이스 이야기 인 듯 하다.

이렇게 구현부를 분리시켜 놓으면 의존성이 유연해지기 때문에 무기를 다양하게 늘릴 수 있다.(Sword, Bible 등)

JobActive 부분에서도 Weapon에 대해 구체적으로 알지 못해도 그냥 무기의 용도 ( 검이면 휘두르기, 지팡이면 광역마법 등)에 맞게 알아서 사용이 된다.

 

JobActive도 마찬가지로 상속받아서  public active 구현부와 선언부를 따로 나눠놔 알아서 각자의 역할이 실행된다.

그리고 Mage가 Sword를 사용하게도 할 수 있다.

만약 Warrior가 Bow와 Sword 둘 다 사용할 수 있게 구현하고 싶다면 bowActive, swordActive 따로 구현 해야했겠지만 이렇게 하면 의존성을 없엘 수 있다.

'디자인 패턴 > 구조' 카테고리의 다른 글

복합체 패턴  (0) 2022.11.24
적응자 패턴  (0) 2022.11.21