- 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();
}
}
}
댓글 없음:
댓글 쓰기