建造者模式:
1、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 2、主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。 3、如何使用:用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来) 4、解决的问题: (1)、方便用户创建复杂的对象(不需要知道实现过程) (2)、代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用) 5、注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序,一般用来创建更为复杂的对象
Lombok使用:
在创建一个类时,会使用写使用get/set方法
当我们使用了lombok之后,可以简化代码:
要注意的是,使用lombok是默认覆盖原来默认全部有参构造方法的,为解决这个问题,可以使用:@AllArgsConstructor注解,
使用**@Builder注解会覆盖无参构造方法,所以可以使用@NoArgsConstructor注解来实现默认无参构造方法。 这时候你就会发现,如果使用建造者模式给实体的每个字段进行赋值,会报错不兼容,这是因为@Builder注解与@NoArgsConstructor**注解冲突了, 所以,现在的全家福是
以上,我们就可以使用建造者模式了
代码语言:javascript复制 List<User> userList = new ArrayList<>();
User user1 = User.builder().id(1).name("ONE").sex("1").build();
User user2 = User.builder().id(2).name("ZERO").sex("0").build();
User user3 = User.builder().id(3).name("TWO").sex("0").build();
User user4 = User.builder().id(4).name("FOUR").sex("1").build();
User user5 = User.builder().id(5).name("ONE").sex("1").build();
//使用lombok没有无参构造方法,只有具有全部参数的构造方法
User user = new User("1",1,"1");
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
System.out.println("筛选前:" userList);
userList = userList.stream().filter(o -> o.getName().equals("ONE")).collect(Collectors.toList());
System.out.println("筛选后:" userList);
}