• 构建者模式(Builder Pattern)


      构建者模式:将一个复杂对象的构造与它的表示分离,使同样的构造可以构造出不同的表示,这样的设计模式被称为构建者模式。

      构建者模式主要需要以下几个部分组成:

        1、需要构建的对象(例如Animal对象)

        2、构建对象的实现类(例如AnimalBuilder对象),在该类中需要提供三种方法

          (1)私有的构建对象(Animal)

          (2)共有的为构建对象赋值的方法

          (3)共有的构建对象方法(例如build方法,返回一个Animal对象)

          (4)共有的静态创建构建者方法(非必需)

      接下来就直接上代码:

    package com.lcl.galaxy.design.pattern.builder;
    
    import lombok.Data;
    
    @Data
    public class Animal {
    
        private String eye;
    
        private String ears;
    
        private String nose;
    
        private String hair;
    
    }
    package com.lcl.galaxy.design.pattern.builder;
    
    public class AnimalBuilder {
    
        private Animal animal = new Animal();
    
        public static AnimalBuilder builder(){
            return new AnimalBuilder();
        }
    
        public AnimalBuilder eye(String eye){
            animal.setEye(eye);
            return this;
        }
    
        public AnimalBuilder ears(String ears){
            animal.setEars(ears);
            return this;
        }
    
        public AnimalBuilder nose(String nose){
            animal.setNose(nose);
            return this;
        }
    
        public AnimalBuilder hair(String hair){
            animal.setHair(hair);
            return this;
        }
    
        public Animal build(){
            return animal;
        }
    
    }

      测试方法

        @Test
        public void builderTest(){
            Animal animal = AnimalBuilder.builder().eye("blue").hair("yellow").build();
            log.info("=========== {} =========== ", JSON.toJSONString(animal));
        }

      构建者模式与工厂模式的区别:工厂模式是创建千篇一律的对象,而构建者模式是可以根据自身需求创建出自定义的对象

      构建者与seter方法或构造方法的区别:构造方法我们需要关注构造函数的传参顺序,而构建者模式不需要关心。setter方法是先创建一个对象,然后再set值,在没有完全赋值完成之前,就可能会被其他地方使用,而构建者模式,是必须等调用build方法后才会返回构建完成的对象。

  • 相关阅读:
    java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同
    文件上传设置上传文件大小
    layui form.on('select(xxx)',function(){});绑定失败
    列表显示, 内容过长省略显示, 鼠标停留在内容上显示全部内容
    mybatis : ERROR. token : COMMA, pos : 373
    js判断手机系统
    vue v-nav指令属性列表
    第五节 tensorboard可视化
    第四节 生成随机张量和张量合并
    第三节 张量
  • 原文地址:https://www.cnblogs.com/liconglong/p/14171549.html
Copyright © 2020-2023  润新知