您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java设计模式——建造者模式

小志的博客 发布时间:2020-05-13 22:41:36 ,浏览量:0

目录结构
    • 一、建造者模式的定义与类型
    • 二、建造者模式的适用场景
    • 三、建造者模式的优点
    • 四、建造者模式的缺点
    • 五、建造者模式简单示例
    • 六、建造者模式在源码中使用的示例

一、建造者模式的定义与类型

1、定义

  • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
  • 用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道

2、类型

  • 创建型
二、建造者模式的适用场景
  • 如果一个对象有非常复杂的内部结构(很多属性)
  • 想把复杂对象的创建和使用分离
三、建造者模式的优点
  • 封装性好,创建和使用分离
  • 扩展性好、建造类之间独立、一定程度上解耦
四、建造者模式的缺点
  • 产生多余的Builder对象
  • 产品内部发生变化,建造者都需要修改,成本较大
五、建造者模式简单示例

1、建造者模式版本1(verson1)

(1)、定义一个课程类 在这里插入图片描述 (2)、定义一个课程的抽象建造者类 在这里插入图片描述 (3)、定义一个课程实际的构造者类 在这里插入图片描述 (4)、定义一个教师类,让教师去制作课程 在这里插入图片描述 (5)、定义一个测试类 在这里插入图片描述 (6)、输出结果如下: 在这里插入图片描述 (7)、类图如下: 在这里插入图片描述 2、建造者模式版本版本2(verson2),通过内部类的方式实现

(1)、定义一个课程类

package com.rf.designPatterns.builder.v2;

/**
 * @description: 定义一个课程类
 * @author: xiaozhi
 * @create: 2020-05-13 21:59
 */
public class Course {
    private String courseName;//课程名称
    private String coursePPT;//课程PPT
    private String courseVideo;//课程视频
    private String courseNotes;//课程笔记
    private String courseQA;//课程的问题和答案

    //构造方法,传入的参数为内部类
    public Course(CourseAbstractBuilder courseAbstractBuilder){
            this.courseName=courseAbstractBuilder.courseName;
            this.coursePPT=courseAbstractBuilder.coursePPT;
            this.courseVideo=courseAbstractBuilder.courseVideo;
            this.courseNotes=courseAbstractBuilder.courseNotes;
            this.courseQA=courseAbstractBuilder.courseQA;
    }
    //toString方法
    @Override
    public String toString() {
        return "Course{" +
                "courseName='" + courseName + '\'' +
                ", coursePPT='" + coursePPT + '\'' +
                ", courseVideo='" + courseVideo + '\'' +
                ", courseNotes='" + courseNotes + '\'' +
                ", courseQA='" + courseQA + '\'' +
                '}';
    }
    
    /** 
    * @Description:  静态内部类
    * @Param:  
    * @Author: xz  
    * @return: 
    * @Date: 2020/5/13 22:03  
    */
    public static class CourseAbstractBuilder{
        private String courseName;//课程名称
        private String coursePPT;//课程PPT
        private String courseVideo;//课程视频
        private String courseNotes;//课程笔记
        private String courseQA;//课程的问题和答案

        //构建课程名称的方法,返回静态内部类
        public CourseAbstractBuilder buildCourseName(String courseName){
            this.courseName=courseName;
            return this;
        }
        //构建课程PPT的方法,返回静态内部类
        public CourseAbstractBuilder  buildCoursePPT(String coursePPT){
            this.coursePPT=coursePPT;
            return this;
        }
        //构建课程视频的方法,返回静态内部类
        public CourseAbstractBuilder  buildcourseVideo(String courseVideo){
            this.courseVideo=courseVideo;
            return this;
        }
        //构建课程笔记的方法,返回静态内部类
        public CourseAbstractBuilder  buildcourseNotes(String courseNotes){
            this.courseNotes=courseNotes;
            return this;
        }
        //构建课程的问题和答案的方法,返回静态内部类
        public CourseAbstractBuilder buildcourseQA(String courseQA){
            this.courseQA=courseQA;
            return this;
        }
        public Course makeCourse(){
            return  new Course(this);
        }
    }

}

(2)、定义一个测试类

package com.rf.designPatterns.builder.v2;

/**
 * @description: 定义一个测试类
 * @author: xiaozhi
 * @create: 2020-05-13 22:12
 */
public class Test {
    public static void main(String[] args) {
        //通过链式调用
        Course course = new Course.CourseAbstractBuilder().buildCourseName("java课程名称").buildCoursePPT("java课程笔记").makeCourse();
        System.out.println(course);

    }
}

(3)、输出结果如下,结果中允许为null: 在这里插入图片描述 (4)、类图如下: 在这里插入图片描述

六、建造者模式在源码中使用的示例

1、StringBuilder和StringBuffer中使用了建造者模式

在这里插入图片描述在这里插入图片描述2、mybatis的SqlSessionFactoryBuilder使用了建造者模式 在这里插入图片描述在这里插入图片描述 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0425s