JAVA 디자인 모드: 작성자(Builder)

3627 단어 java 디자인 모드
대상을 만드는 방법은 매우 많은데 흔히 볼 수 있는 것은 구조 함수, 정적 공장 방법, 공장 방법 등이 있다.상기 세 가지 방법은 여러 개의 매개 변수를 제공해야 하는 대상을 만드는 데 적합하지 않으며, 그 중 일부 매개 변수는 선택할 수 있는 장면이다.독자들은 빈 구조 방법을 통해 대상의 초기 형태를 구축한 다음에 Getter와setter 방법을 호출하여 대상 내부에 상태 데이터를 주입할 수 있다.이런 방식은 보기에는 괜찮은 것 같지만, 대상의 상태 데이터가 완전히 쓰기 전에 대상이 사용될 위험이 존재할 수 있다.
건설자 모델은 제품의 내부 이미지와 제품의 생성 과정을 분리하여 하나의 건설 과정에 서로 다른 내부 이미지를 가진 제품 대상을 생성한다.건조 모델은 제품 내부의 이미지를 독립적으로 변화시킬 수 있기 때문에 고객은 제품 내부 구성의 세부 사항을 알 필요가 없다.건조 모델은 단계별로 진행되는 건조 과정을 강제로 실행할 수 있다.
건설자 모델에 관련된 세 가지 역할:
  • 제품: 건조된 대상;
  • 건설자: 추상적인 제품의 건설 과정;
  • 감독자: 수요에 따라 다른 제품을 만든다.

  • 온라인 클래식의 파일 작성 프로세스를 예로 들면 먼저 작성할 제품, 즉 파일 객체를 살펴보고 파일은 세 부분으로 구성됩니다.
    public class MyFile {
        private String head;
        private String content;
        private String end;
    
        public void setFcontent(Strig content) {
            this.content = content;
        }
    
        public void setEnd(String end) {
            this.end = end;
        }
    
        public void setHead(String head) {
            this.head = head;
        }
    
        public void write(String path) throws IOException{
            File f=new File(path);
            PrintWriter out=new PrintWriter(new FileWriter(f));
            out.println(head);
            out.println(content);
            out.println(end);
            out.close();  
        }
    }

    다시 한 번 창설자를 살펴보자. 여기는 인터페이스이다.
    public interface FileBuilder {
    
        void buildHead();
    
        void buildContent();
     
        void buildEnd();
    
        MyFile getResult();
    
    }

    마지막으로 감독자는 대상의 창설 과정을 실시하는 데 사용한다.
    public class FileDirector {
    
        private FileBuilder filebuilder;
    
        public FileDirector(FileBuilder filebuilder){
            this.filebuilder=filebuilder;
        }
    
        public MyFile construct(){
            filebuilder.buildHead();
            filebuilder.buildContent();
            filebuilder.buildEnd();
            return filebuilder.getResult();
        }
    }

    XML 파일과 TXT 파일을 각각 작성하는 데 사용되는 두 명의 작성자
    public class XmlFileBuilder implements FileBuilder{
    
        private MyFile file = new MyFile();;
       
        public void buildHead() {
            file.setHead("<?xml version=\"1.0\"?><content>"); 
        }
    
        public void buildContent() {
            file.setContent("<node>value</node>");
        }
    
        public void buildEnd() {
            file.setEnd("</content>");  
        }
    
        public MyFile getResult() {
            return file;
        }
    }
    
    public class TxtFileBuilder implements FileBuilder{
    
        private MyFile file = new MyFile();;
       
        public void buildHead() {
            file.setHead("this it the txt file head"); 
        }
    
        public void buildContent() {
            file.setContent("this it the txt file content");
        }
    
        public void buildEnd() {
            file.setEnd("this it the txt file end");  
        }
    
        public MyFile getResult() {
            return file;
        }
    }

    마지막으로 테스트 코드:
    public void test(){
        FileBuilder builder = new XmlFileBuilder();
        FileDirector director = new FileDirector(builder);
        MyFile file = director.construct();
        // 
    }

    위의 코드를 보면, 우리는builder의 실현을 바꾸어 서로 다른 대상을 만들 수 있으며, 대상의 창설 과정은 매우 잘 숨겨져 있고, 창설되지 않은 대상을 노출하지 않을 수 있다.
    개발자로서 JDK가 제공하는 도구류인 StringBuilder나StringBuffer를 사용한 적이 있다. 사실상StringBuilder와StringBuffer가 사용하는 것이 바로 건설자 모델이다.
    추가 JAVA 디자인 모드
    더 많은 훌륭한 오리지널 글은 필자의 오리지널 블로그를 주목해 주십시오.
    http://www.coolfancy.com

    좋은 웹페이지 즐겨찾기