Facade는 건물의 앞쪽 정면이라는 뜻을 가진다. 여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 때, 중간에 facede라는 객체를 두고, 여기서 제공하는 interface 만을 활용하여 기능을 사용하는 방식.
facade는 자신이 가지고 있는 각 클래스의 기능을 명확히 알아야 함.
- Ftp.java
package com.company.design.facade;
public class Ftp {
private String host;
private int port;
private String path;
public Ftp(String host, int port, String path){
this.host = host;
this.port = port;
this.path = path;
}
public void connect(){
System.out.println("FTP Host : "+host+" Port : "+port+" 로 연결합니다.");
}
public void moveDirectory(){
System.out.println("FTP path : "+ path+"로 이동합니다.");
}
public void disConnect(){
System.out.println("FTP 연결을 종료합니다.");
}
}
- Reader.java
package com.company.design.facade;
public class Reader {
private String fileName;
public Reader(String fileName){
this.fileName = fileName;
}
public void fileConnect(){
String msg = String.format("Reader %s 로 연결합니다.",fileName);
System.out.println(msg);
}
public void fileRead(){
String msg = String.format("Reader %s 의 내용을 읽어옵니다.",fileName);
System.out.println(msg);
}
public void fileDisconnect(){
String msg = String.format("Reader %s 로 연결 종료 합니다.",fileName);
System.out.println(msg);
}
}
- SftpClient.java
package com.company.design.facade;
public class SftpClient {
private Ftp ftp;
private Reader reader;
private Writer writer;
public SftpClient(Ftp ftp, Reader reader, Writer writer){
this.ftp = ftp;
this.reader = reader;
this.writer = writer;
}
public SftpClient(String host, int port, String path, String fileName){
this.ftp = new Ftp(host, port, path);
this.reader = new Reader(fileName);
this.writer = new Writer(fileName);
}
public void connect(){
ftp.connect();
ftp.moveDirectory();
writer.fileConnect();
reader.fileConnect();
}
public void disConnect(){
writer.fileDisconnect();
reader.fileConnect();
ftp.disConnect();
}
public void read(){
reader.fileRead();
}
public void write(){
writer.write();
}
}
- Writer.java
package com.company.design.facade;
public class Writer {
private String fileName;
public Writer(String fileName){
this.fileName = fileName;
}
public void fileConnect(){
String msg = String.format("Reader %s 로 연결합니다.",fileName);
System.out.println(msg);
}
public void fileDisconnect(){
String msg = String.format("Reader %s 로 연결 종료 합니다.",fileName);
System.out.println(msg);
}
public void write(){
String msg = String.format("Reader %s 로 파일쓰기를 합니다.",fileName);
System.out.println(msg);
}
}
- Main.java
package com.company.design;
import com.company.design.adapter.*;
import com.company.design.facade.Ftp;
import com.company.design.facade.Reader;
import com.company.design.facade.SftpClient;
import com.company.design.facade.Writer;
public class Main {
public static void main(String[] args){
Ftp ftpClient = new Ftp("www.foo.co.kr", 22, "/home/etc");
ftpClient.connect();
ftpClient.moveDirectory();
Writer writer = new Writer("text.tmp");
writer.fileConnect();
writer.write();
Reader reader = new Reader("text.tmp");
reader.fileConnect();
reader.fileRead();
reader.fileDisconnect();
writer.fileDisconnect();
ftpClient.disConnect();
SftpClient sftpClient = new SftpClient("www.foo.co.kr", 22, "/home/ect"
, "text.tmp");
sftpClient.connect();
sftpClient.write();
sftpClient.read();
sftpClient.disConnect();
}
}
== 출력 ==
'개발공부 > Java' 카테고리의 다른 글
[Java] 이것이 자바다 Ch5. 참조 타입 (1) | 2023.01.04 |
---|---|
[Java] 전략(Strategy) 패턴 (0) | 2022.02.07 |
[Java] 옵저버(Observer) 패턴 (0) | 2022.02.07 |
[Java] 데코레이터(Decorator) 패턴 (0) | 2022.02.07 |
[Java] 프록시(Proxy) 패턴 (0) | 2022.02.07 |