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


    概念:

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

    实现:

      定义书籍接口:

        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容器的设计

  • 相关阅读:
    组队竞赛--全国模拟(三)
    排序子序列--全国模拟(三)
    20、剑指offer--包含min函数的栈
    19、剑指offer--顺时针打印链表
    leetcode链表--12、remove-duplicates-from-sorted-list-ii(删除排序链表中全部的重复结点)
    qq客服代码
    百度翻译API
    .net如何判断网页是否由搜索引擎蜘蛛访问?
    Kibana4学习<三>
    Kibana4学习<二>
  • 原文地址:https://www.cnblogs.com/ben-mario/p/10688049.html
Copyright © 2020-2023  润新知