2012년 4월 24일 화요일

[Java Design Pattern_2]Adapter 샘플 코드3_File 입출력

- Target(대상) : 상속의 경우 인터페이스로 원하는 API를 만든다.


package Adapter;


import java.io.IOException;


public interface FileIO {
public void readFromFile(String filename) throws IOException;
public void writeToFile(String filename) throws IOException;
public void setValue(String key, String value);
public String getValue(String key);
}


- Adaptee(개조되는 쪽) : 기존에 사용되고 있는 클래스로서 Target의 API에 맞게 재구현되는 클래스이다.


java.util.Properties


void load (InputStream in) throws IOException
: 속성의 집합을 InputStream에서 읽는다.


void store (OutputStream out, String header) throws IOException
: 속성의 집합을 OutputStream에 쓴다. header는 코멘트 문자열.


- Adapter(어댑터) : Adaptee와 Target을 이어주는 클래스이다.


1. 상속의 경우 타겟은 인터페이스로 Adaptee는 상속으로 받아서 변환시킨다.



package Adapter;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;


public class FileProperties extends Properties implements FileIO{
public void readFromFile(String filename) throws IOException{
load(new FileInputStream(filename));
}

public void writeToFile(String filename) throws IOException {
store(new FileOutputStream(filename), "written by FileProperties");
}

public void setValue(String key, String value) {
setProperty(key, value);
}

public String getValue(String key) {
return getProperty(key, "");
}
}


2. 위임의 경우 Target클래스를 상속해서 Adaptee 클래스 인스턴스로 구현시킨다.



package Adapter;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;


public class FileProperties implements FileIO{

private Properties properties;

public FileProperties(){
this.properties = new Properties();
}

public void readFromFile(String filename) throws IOException{
this.properties.load(new FileInputStream(filename));
}

public void writeToFile(String filename) throws IOException {
this.properties.store(new FileOutputStream(filename), "written by FileProperties");
}

public void setValue(String key, String value) {
this.properties.setProperty(key, value);
}

public String getValue(String key) {
return this.properties.getProperty(key, "");
}
}

- Client(의뢰자) : Target을 통해 일을 하는 클래스이다.



package Adapter;


import java.io.*;


public class Main {


public static void main(String[] args) {
FileIO f = new FileProperties();
try {
f.readFromFile("file.txt");
f.setValue("year", "2004");
f.setValue("month", "4");
f.setValue("day", "21");
f.writeToFile("newfile.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
}




댓글 없음:

댓글 쓰기