设计模式(第四式:建造者模式)

概念:

  建造者模式:将一个结构的建造和它的表示分离,使得同样的建造过程可以创建不同的表示。

实现:

  定义书籍接口:

    public abstract class Book {
        private Integer id;
        private String name;

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

  书籍类别:(小说类书籍、工具类书籍...)

    public class NovelBook extends Book {
        private String plot;

        public String getPlot() {
            return plot;
        }

        public void setPlot(String plot) {
            this.plot = plot;
        }
    }
    public class ToolBook extends Book {
        private String purpose;

        public String getPurpose() {
            return purpose;
        }

        public void setPurpose(String purpose) {
            this.purpose = purpose;
        }
    }

  定义创建者接口:

    public interface BookBuilder {
        /**
         * 设置书的id
         * @param id
         */
        void setBookId(Integer id);

        /**
         * 设置书的名称
         * @param name
         */
        void setBookName(String name);

        Book createBook();
    }

  创建者类别:

    public class NovelBookBuilder implements BookBuilder {
        NovelBook book = new NovelBook();
        @Override
        public void setBookId(Integer id) {
            book.setId(id);
        }

        @Override
        public void setBookName(String name) {
            book.setName(name);
        }

        @Override
        public Book createBook() {
            return book;
        }

        public void setBookPlot(String plot){
            book.setPlot(plot);
        }
    }
    public class ToolBookBuilder implements BookBuilder {
        ToolBook book = new ToolBook();
        @Override
        public void setBookId(Integer id) {
            book.setId(id);
        }

        @Override
        public void setBookName(String name) {
            book.setName(name);
        }

        @Override
        public Book createBook() {
            return book;
        }

        public void setPurpose(String purpose) {
            book.setPurpose(purpose);
        }
    }


分析:通过代码可以简单的分析一下,有没有一种很熟悉的感觉,但又好像觉得不一样,这就对了,设计模式中很多都是这样的感觉,但仔细体会,会有很奇妙的发现,就是有不一样的地放

  1.容易扩展,但不具备普遍性,也就是可以很方便的增加新的类型和对应的建造者,但是还是在一定数量内,不具有一般普遍性,这个主要取决于被创造的对象是否高度统一。

  2.封装型比较好,外部不用知道内部具体什么操作,只关心具体对象的使用即可。
  3.可以和单例或者工厂方法组合。
  4.适用场景:
        a.在调用相同方法,因为顺序不同而导致结果不同时可以考虑。
        b.在构建特别复杂类型时,比如,Book中有一个Author(作者)类型等,或是还需要Cover(封面)类型,甚至多个类型组合。并且这些属性只要在用的前一刻复制就可以,并不影响其他地方使用。
        ...

经典框架中使用的:
  Spring框架,Httpclient中对Cookie容器的设计

原文地址:https://www.cnblogs.com/ben-mario/p/10688049.html