デザインモードFacade Pattern

5572 ワード

1. Facade Pattern

  • Facadeとは建物の正面を意味します.(後ろはわかりません)
  • 複数のオブジェクトと実際に使用されているサブオブジェクトとの間に複雑な依存関係がある場合、ここで提供されるインタフェース使用機能のみを利用してfacadeというオブジェクトを中間に配置する.
  • Facadeは、自分が持っている各レベルの機能を明確にする必要があります.
    複数のオブジェクトを組み合わせて特定の機能を作成するには
  • 2.テスト項目

  • Class : Ftp, Reader, Writer, SftpClient
  • SftpClient == Facade
  • 01.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("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 fileDisConnector() {
            String msg = String.format("Reader %s로 연결 종료 합니다.", fileName);
            System.out.println(msg);
        }
    }
  • 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("WRITER %s로 연결 합니다.", fileName);
            System.out.println(msg);
        }
    
        public void fileDisConenct() {
            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);
        }
    }
  • Main.java
  • package com.company.design;
    
    import com.company.design.facade.Ftp;
    import com.company.design.facade.Reader;
    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.fileDisConenct();
            ftpClient.disConnect();
    
        }
    }

    02.Facade適用後

  • 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.fileDisConenct();
            reader.fileConnect();
        }
    
        public void disConnect() {
            writer.fileDisConenct();
            reader.fileDisConnect();
            ftp.disConnect();
        }
    
        public void read() {
            reader.fileRead();
        }
    
        public void write() {
            writer.write();
        }
    }
  • Main.java
  • package com.company.design;
    
    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.fileDisConenct();
            ftpClient.disConnect();
    
            System.out.println("\n-------------------\n");
    
            SftpClient sftpClient = new SftpClient("www.foo.co.kr", 22, "/home/etc", "text.tmp");
            sftpClient.connect();
            sftpClient.write();
            sftpClient.read();
            sftpClient.disConnect();
    
        }
    }