'Layers Pattern'에 해당되는 글 1건

  1. POSA 1 - Layers Pattern 2009/06/09

POSA 1 - Layers Pattern

from Ooad 2009/06/09 17:00
간단하게 말하면 복잡한 시스템을 레이어로 나눠서 Task를 하위 레이어 또는 상위 레이어로의 Delegation을 통해서 구조화를 하는 패턴이라고 생각이 듭니다.

제가 생각하는 내용을 아래의 형태별로 간단하게 코드로 끄적여 봅니다.
아래의 top-down은 layer별 interface가 필요할 것 같고, 그 인터페이스를 layer에 해당하는 기능 클래스(Level0201, Level0202)가 구현을 해서 상위 Layer가 하위 Layer에 Dependency를 줄이면서 사용하면 될 것 같습니다.
그리고, bottom-up은 상속을 통해서 상위 클래스의 메쏘드를 호출하는 형태로 구현을 해 봤습니다. 

혹시 코드보시고, 틀렸다고 생각이 되시는 부분이 있으면 답글로 끄적여 주시면 감사하겠습니다.

1. Top-Down Layer 형태

Level01.java
package layer.down;

import java.nio.ByteBuffer;

public class Level01 {
    ByteBuffer buffer;
    Level02Interface levelTwo; // Level02-1
   
    public void setByteBuffer(ByteBuffer buffer) {
        this.buffer = buffer;
    }
   
    public void setLevel() {
        this.levelTwo = new Level0201();
    }
   

    public void printLevel() {
        if(buffer.getInt() == 4)
            this.levelTwo = new Level0202();
       
        System.out.println("Level01 printLevel() called");
        this.levelTwo.foo();       
    }
}

Level02Interface.java
package layer.down;

public interface Level02Interface {

    public void foo();
}

Level0201.java
package layer.down;

public class Level0201 implements Level02Interface {

    @Override
    public void foo() {
        // TODO Auto-generated method stub
        System.out.println("Level0201 printLevel() called");
    }
}

Level0202.java

package layer.down;

public class Level0202 implements Level02Interface {

    @Override
    public void foo() {
        // TODO Auto-generated method stub
        System.out.println("Level0202 printLevel() called");
    }
}

클라이언트
        ByteBuffer buffer = ByteBuffer.allocate(4);
        buffer.putInt(4);
        buffer.flip();
       
        Level01 layer = new Level01();
        layer.setByteBuffer(buffer);
        layer.setLevel();
        layer.printLevel();   


2. Bottom-Up Layer 형태

SLevel01.java
package layer.up;

public class SLevel01 {
   
    //
    public void read(java.nio.ByteBuffer buffer) {
        System.out.println("level01 - "+ buffer.getInt());
    }
}


SLevel02.java
package layer.up;

public class SLevel02 extends SLevel01 {

    @Override
    public void read(java.nio.ByteBuffer buffer) {
        System.out.println("level02 - " + buffer.getInt());
       
        super.read(buffer);
    }
}


클라이언트
        ByteBuffer buffer = ByteBuffer.allocate(8);
        buffer.putInt(4);
        buffer.putInt(100);
        buffer.flip();
       
        SLevel02 layer = new SLevel02();
        layer.read(buffer);   

저작자 표시

'Ooad' 카테고리의 다른 글

POSA 1 - Whole-Part Pattern  (0) 2009/06/16
POSA 1 - Presentation Abstraction Control Pattern  (0) 2009/06/15
POSA 1 - Layers Pattern  (0) 2009/06/09
POSA 2 - A System of Patterns  (0) 2008/07/28
Design Pattern Quick Reference Image  (0) 2008/07/03