好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java中常用的设计模式之建造者模式详解

优点

1.建造者独立,易扩展。

2.便于控制细节风险。

缺点

1.产品必须有共同点,范围有限制。

2.如内部变化复杂,会有很多的建造类。

使用场景

1.需要生成的对象具有复杂的内部结构。

2.需要生成的对象内部属性本身相互依赖。

一、实现方式

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

package com.asurplus测试数据mon.builder.style1;

public class UserInfo {

     private String name;

     private int age;

     /**

      * 创建一个新的建造者

      *

      * @return

      */

     public static UserInfoBuilder builder() {

         return new UserInfoBuilder();

     }

     public String getName() {

         return name;

     }

     public void setName(String name) {

         this .name = name;

     }

     public int getAge() {

         return age;

     }

     public void setAge( int age) {

         this .age = age;

     }

     @Override

     public String toString() {

         return "UserInfo{" +

                 "name='" + name +

                 ", age=" + age +

                 '}' ;

     }

     /**

      * 建造者内部类

      */

     public static class UserInfoBuilder {

         private String name;

         private int age;

         public UserInfoBuilder name(String name) {

             this .name = name;

             return this ;

         }

         public UserInfoBuilder age( int age) {

             this .age = age;

             return this ;

         }

         /**

          * 创建一个新的实例对象并赋值

          *

          * @return

          */

         public UserInfo build() {

             UserInfo userInfo = new UserInfo();

             userInfo.setName( this .name);

             userInfo.setAge( this .age);

             return userInfo;

         }

     }

}

我们定义了一个 UserInfo 类,有 name,age 两个属性,还定义了一个静态内部类 UserInfoBuilder,帮助我们建造 UserInfo,并提供链式调用的方法。

二、实现方式

1、引入依赖

?

1

2

3

4

5

6

<!-- lombok插件 -->

< dependency >

     < groupId >org.projectlombok</ groupId >

     < artifactId >lombok</ artifactId >

     < optional >true</ optional >

</ dependency >

Lombok 需要在 IDEA 中安装插件,具体方法,请百度。

2、实现

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package com.asurplus测试数据mon.builder.style2;

import lombok.Builder;

import lombok.Data;

/**

  * get set toString 方法注解

  */

@Data

/**

  * 建造者模式注解

  */

@Builder

public class UserInfo2 {

     private String name;

     private int age;

}

基于 Lombok 的注解,我们省略了大部分代码,但是具体的实现方式和我们的方式一是一模一样的,调用方法也是一样的。

三、测试

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package com.asurplus测试数据mon.builder;

import com.asurplus测试数据mon.builder.style1.UserInfo;

import com.asurplus测试数据mon.builder.style2.UserInfo2;

/**

  * 建造者模式

  */

public class TestMain {

     public static void main(String[] args) {

         // 手写的方式

         UserInfo userInfo = UserInfo.builder().name( "张三" ).age( 20 ).build();

         System.out.println(userInfo);

         // 注解的方式

         UserInfo2 userInfo2 = UserInfo2.builder().name( "李四" ).age( 30 ).build();

         System.out.println(userInfo2);

     }

}

输出结果

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!   

原文链接:https://lizhou.blog.csdn.net/article/details/123149257

查看更多关于Java中常用的设计模式之建造者模式详解的详细内容...

  阅读:12次