zoukankan      html  css  js  c++  java
  • 设计模式(第四式:建造者模式)

    概念:

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

    实现:

      定义书籍接口:

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

  • 相关阅读:
    js 模拟表单提交下载文件
    vue 刷新子组件方法解决使用v-if闪屏问题
    Java15-Tomcat&Servlet&HTTP&Request&Response
    JAVA26-SpringBoot-在线教育项目01
    20 Vue-ajax
    19 Vue-JQuery
    18 Vue-Json
    Java 20-Mybatis学习
    17 Vue-ES6语法之Promise、VueX、网络请求封装
    16 Vue-cli脚手架介绍与使用
  • 原文地址:https://www.cnblogs.com/ben-mario/p/10688049.html
Copyright © 2011-2022 走看看