간단하게 말하면 복잡한 시스템을 레이어로 나눠서 Task를 하위 레이어 또는 상위 레이어로의 Delegation을 통해서 구조화를 하는 패턴이라고 생각이 듭니다.
제가 생각하는 내용을 아래의 형태별로 간단하게 코드로 끄적여 봅니다.
아래의 top-down은 layer별 interface가 필요할 것 같고, 그 인터페이스를 layer에 해당하는 기능 클래스(Level0201, Level0202)가 구현을 해서 상위 Layer가 하위 Layer에 Dependency를 줄이면서 사용하면 될 것 같습니다.
그리고, bottom-up은 상속을 통해서 상위 클래스의 메쏘드를 호출하는 형태로 구현을 해 봤습니다.
혹시 코드보시고, 틀렸다고 생각이 되시는 부분이 있으면 답글로 끄적여 주시면 감사하겠습니다.
1. Top-Down Layer 형태
Level01.java
Level02Interface.java
Level0201.java
Level0202.java
클라이언트
2. Bottom-Up Layer 형태
SLevel01.java
SLevel02.java
클라이언트
제가 생각하는 내용을 아래의 형태별로 간단하게 코드로 끄적여 봅니다.
아래의 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();
}
}
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();
}
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");
}
}
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");
}
}
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();
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());
}
}
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);
}
}
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);
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 |