728x90
Facade는 건물의 앞쪽 정면 이라는 뜻을 가진다. 여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 때, 중간에 facade 라는 객체를 두고, 여기서 제공하는 interface만을 활용하여 기능을 사용하는 방식이다. facade는 자신이 가지고 있는 각 클래스의 기능을 명확히 알아야 한다.
Facade패턴을 이용한 FTP만들어보기
FTP란? FTP(File Transfer Protocol)은 이용자의 PC와 쇼핑몰 호스팅 서버 간 파일을 송수신하는 프로그램을 말한다. FTP는 파일 전송 전용 서비스이기 때문에, 많은 양의 파일을 일괄적으로 주고 받을 때 효과적임.
Ftp(클래스)
package Muzi.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(클래스)
package Muzi.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 fileDiscibbect() {
String msg = String.format("Reader %s 로 연결 종료 합니다..",fileName);
System.out.println(msg);
}
}
Writer(클래스)
package Muzi.facade;
public class Writer {
private String fileName;
public Writer(String fileName) {
this.fileName = fileName;
}
public void fileConnect() {
String msg = String.format("Writer %s 로 연결 합니다.",fileName);
System.out.println(msg);
}
public void fileDisconnect() {
String msg = String.format("Writer %s 로 연결 합니다.",fileName);
System.out.println(msg);
}
public void write() {
String msg = String.format("Writer %s 로 연결 합니다.",fileName);
System.out.println(msg);
}
}
SftpClient(클래스)
package Muzi.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.fileDiscibbect();
ftp.disConnect();
}
public void read() {
reader.fileRead();
}
public void write() {
writer.write();
}
}
Main(클래스)
package Muzi;
import Muzi.facade.Ftp;
import Muzi.facade.Reader;
import Muzi.facade.SftpClient;
import Muzi.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.fileDiscibbect();
writer.fileDisconnect();
ftpClient.disConnect();
SftpClient sftpClient = new SftpClient("www.foo.co.kr", 22, "/home/etc", "text.tmp");
sftpClient.Connect();
sftpClient.write();
sftpClient.read();
sftpClient.disConnect();
}
}
'Spring > 디자인패턴' 카테고리의 다른 글
Strategy pattern(스트래티지 패턴) (0) | 2023.07.25 |
---|---|
ObserverPattern(옵저버 패턴) (0) | 2023.07.24 |
Decorator pattern(데코레이터 패턴) (0) | 2023.07.24 |
Proxy pattern(프록시 패턴) (0) | 2023.07.21 |
Adapter Pattern(어댑터 패턴) (0) | 2023.07.19 |