POSA 1 – Presentation Abstraction Control Pattern

Presentation Abstraction Control Pattern은 계층 형태의 시스템에서 각 단계별로 Agent를 가지고, Agent들이 계층적(상,하)으로 협력을 하는 구조가 필요할 때 사용할 수 있는 패턴이라고 하네요.. 각 Agent는 계층의 레벨에 맞는 기능을 담당합니다. 그리고 각 Agent는 Presentation, Abstraction, Control을 가질 수 있습니다.

제가 생각하는 내용을 아래의 형태별로 간단하게 코드로 끄적여 봅니다.
아래의 TopAgent는 데이타를 가지고 있고, InterMediateAgent는 mediate 기능을 담당하고 실제로 뷰는 BottomAgent를 통해서 구현을 합니다. 그리고, BottomAgent는 view()는 인터페이스로 뽑고, setter, getter 메쏘드는 Abstract Class를 통해서 여러개의 BottomAgent를 구현하면 좋을듯 합니다.


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

PACClient.java


public class PACClient {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  pac.TopAgent tAgent = new pac.TopAgent();
  pac.inter.InterMediateAgent interAgent = new pac.inter.InterMediateAgent();
  pac.bottom.BottomAgent bAgent = new pac.bottom.BottomAgent();
  
  interAgent.setTopAgent(tAgent);
  bAgent.setIntermediateAgent(interAgent);
  interAgent.setBottomAgent(bAgent);
  
  interAgent.sendMsg();
 }
}


TopAgent.java



package pac;


import pac.inter.InterMediateAgent;


public class TopAgent {
 //
 private InterMediateAgent intermediateAgent = null;
 
 private String data = null;
 
 //
 public InterMediateAgent getIntermediateAgent() {
  return intermediateAgent;
 }


 //
 public void setIntermediateAgent(InterMediateAgent agent ) {
  intermediateAgent = agent;
 }
 
 @SuppressWarnings(“deprecation”)
 public String getData() {
  this.data = “loading data ”
   + new java.util.Date().getYear() +”, ”
   + new java.util.Date().getMonth() +”, “
   + new java.util.Date().getDay() +”, “
   + new java.util.Date().getHours() +”, “
   + new java.util.Date().getMinutes() +”, “
   + new java.util.Date().getSeconds();
  
  return this.data;
 }


 //
 public void setData(String data) {
  this.data = data;
 }
}




InterMediateAgent.java


package pac.inter;

import pac.TopAgent;
import pac.bottom.BottomAgent;


public class InterMediateAgent {
 //
 private TopAgent topAgent = null;


 //
 private BottomAgent bottomAgent = null;
 
 //
 public TopAgent getTopAgent(){
  return topAgent;
 }


 //
 public void setTopAgent(TopAgent agent){
  topAgent = agent;
 }
 
 //
 public BottomAgent getBottomAgent(){
  return bottomAgent;
 }
 
 //
 public void setBottomAgent(BottomAgent agent){
  bottomAgent = agent;
 }
 
 //
 public String getData() {
  return this.topAgent.getData();
 }
 
 //
 public void SetData(String data) {
  this.topAgent.setData(data);
 }
 
 // template method가 되도 되겠넹..
 public void sendMsg() {
  this.bottomAgent.view();
 }


}


BottomAgent.java



package pac.bottom;


import pac.inter.InterMediateAgent;


public class BottomAgent { 
 //
 private InterMediateAgent interAgent = null;
 
 //
 private Abstraction abs = null;


 //
 private Presentation pre = null;
 
 //
 public BottomAgent() {
  abs = new Abstraction();
  pre = new Presentation();
 }
 
 //
 public InterMediateAgent getIntermediateAgent() {
  return interAgent;
 }


 //
 public void setIntermediateAgent(InterMediateAgent agent) {
  this.interAgent = agent;
 }
 
 //
 public void view() {
  String source = this.interAgent.getData();
  abs.setData(source);
  
  pre.view(abs.getData());
 }
}




Abstraction.java



package pac.bottom;


public class Abstraction {
 //
 private String data;
 
 public String getData() {
  return data;
 }


 public void setData(String data) {
  this.data = data;
 }
 
 //
 public String toString() {
  return data;
 }
}




Presentation.java


package pac.bottom;

public class Presentation {
 String data = null;
 
 public String getData() {
  return data;
 }


 public void setData(String data) {
  this.data = data;
 }



 public void view(Object obj) {
  System.out.println(obj.toString());
 }
}



* reference
– http://en.wikipedia.org/wiki/Presentation-abstraction-control
http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=126
http://lakhos.egloos.com/2771689
 

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.