오답노트

[Java] 파사드 패턴 본문

Java/디자인패턴

[Java] 파사드 패턴

권멋져 2023. 7. 12. 09:49

파사드 패턴

파사드는 건물의 앞쪽 정면이라는 뜻을 가진다. 여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 때, 중간에 파사드라는 객체를 두고, 여기서 제공하는 interface만을 활용하여 기능을 사용하는 방식이다.

 

패턴 적용 전

클래스

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 연결을 종료합니다.");
    }
}
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 fileWrite(){
        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 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);
    }
}

실행

import facade.Ftp;
import facade.Reader;
import facade.SftpClient;
import facade.Writer;


public class Main {
    public static void main(String[] args) {
        Ftp ftpClient = new Ftp("www.naver.com",22,"/home/etc");
        ftpClient.connect();
        ftpClient.moveDirectory();

        Writer writer = new Writer("text.txt");
        writer.fileConnect();
        writer.fileWrite();


        Reader reader = new Reader("text.txt");
        reader.fileConnect();
        reader.fileRead();

        reader.fileDisconnect();
        writer.fileDisconnect();
        ftpClient.disConnect();

    }

}

패턴 적용 후

클래스

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.fileDisconnect();
        ftp.disConnect();
    }

    public void read(){
        reader.fileRead();
    }

    public void write(){
        writer.fileWrite();
    }

}

SftpClient 클래스의 경우 Ftp, Reader, Writer 변수를 가지고 복잡한 과정을 메소드에 모아서 제공하고 있다. 

 

실행

import facade.SftpClient;


public class Main {
    public static void main(String[] args) {

        SftpClient sftpClient = new SftpClient("www.naver.com",22,"/home/etc","text.txt");
        sftpClient.connect();

        sftpClient.write();
        sftpClient.read();

        sftpClient.disConnect();

    }

}

'Java > 디자인패턴' 카테고리의 다른 글

[Java] 전략 패턴  (0) 2023.07.12
[Java] 옵저버 패턴  (0) 2023.07.12
[Java] 프록시 패턴  (0) 2023.07.11
[Java] 어댑터 패턴  (0) 2023.07.11
[Java] 데코레이터 패턴  (0) 2023.07.11