java 设计模式 构造器模式 封装复杂对象的构造逻辑

构造器模式,或称建造者模式,用于将复杂对象的构造过程和表示分离,允许创建不同表示的相同构建过程。该模式简化了对象的构建并提供了更大的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造器模式,也被称为建造者、生成器模式,是设计模式中比较容易理解的模式之一。

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

package com.designpattern;

public class BuilderPatternDemo {

    public static void main(String[] args) {
        User user = new User();
        System.out.println("在设置age之前进行复杂的校验逻辑");
        user.setAge("1");
        System.out.println("在设置name之前进行复杂的校验逻辑");
        user.setName("xx");
        System.out.println("在设置male之前进行复杂的校验逻辑");
        user.setSex("male");
        // 上面是简化的一个逻辑,实际上对于一些有几个个字段,甚至上百个字段的复杂对象的构建
        // 上面那段代码会极度膨胀,非常复杂
        // 一个是说,大量代码堆积在一起,维护性非常差,可读性非常差,一堆代码
        User user1 = new User.User1Builder()
            .Age("1")
            .Name("xx")
            .Sex("male")
            .builder();

        User user2 = new User.User2Builder()
            .Age("1")
            .Name("xx")
            .Sex("male")
            .builder();

    }

    public static class User {
        private String name;
        private String age;
        private String sex;

        public String getName() {
            return name;
        }

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

        public void setAge(String age) {
            this.age = age;
        }

        public String getAge() {
            return age;
        }

        public String getSex() {
            return sex;
        }

        public void setSex(String sex) {
            this.sex = sex;
        }

        public static abstract class UserBuilder {
            protected User user;

            public UserBuilder() {
                user = new User();
            }

            public UserBuilder Name(String name) {
                user.setName(name);
                return this;
            }

            public UserBuilder Age(String age) {
                user.setAge(age);
                return this;
            }


            public UserBuilder Sex(String sex) {
                user.setSex(sex);
                return this;
            }

            public User builder() {
                return user;
            }
        }

        public static class User1Builder extends UserBuilder {
            public User builder() {
                System.out.println("进行复杂的字段逻辑校验1");
                return user;
            }
        }

        public static class User2Builder extends UserBuilder {
            public User builder() {
                System.out.println("进行复杂的字段逻辑校验2");
                return user;
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值