1    代码演练

1.1  建造者模式演练

1.2  静态内部类演练建造者模式(链式调用)

1    代码演练
1.1  建造者模式演练

需求:

根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作教学课程。

重点:

教练类coach.java标红部分,builder设值,然后赋值(看test.java)。

uml类图:

测试类:

  1. package com.geely.design.pattern.creational.builder;
  2.  
  3. public class Test {
  4. public static void main(String [] args){
  5. Coach coach = new Coach();
  6. Course course = new Course();
  7. CourseBuilder courseBuilder = new CourseActualBuilder();
  8. coach.setCourseBuilder(courseBuilder);
  9.  
  10. course=coach.makeCourse("设计模式","设计模式PPT","设计模式标题","设计模式视频","设计模式课程问答");
  11. System.out.println(course.toString());
  12. }
  13. }

实体课程类:

  1. package com.geely.design.pattern.creational.builder;
  2.  
  3. public class Course {
  4. private String courseName;
  5. private String coursePPT;
  6. private String courseArticle;
  7. private String courseVideo;
  8. private String courseQA;
  9.  
  10. public void setCourseName(String courseName) {
  11. this.courseName = courseName;
  12. }
  13.  
  14. public void setCoursePPT(String coursePPT) {
  15. this.coursePPT = coursePPT;
  16. }
  17.  
  18. public void setCourseArticle(String courseArticle) {
  19. this.courseArticle = courseArticle;
  20. }
  21.  
  22. public void setCourseVideo(String courseVideo) {
  23. this.courseVideo = courseVideo;
  24. }
  25.  
  26. public void setCourseQA(String courseQA) {
  27. this.courseQA = courseQA;
  28. }
  29.  
  30. /**
  31. * toString方法,为了方便测试,进行打印
  32. * @return
  33. */
  34. @Override
  35. public String toString() {
  36. return "Course{" +
  37. "courseName='" + courseName + '\'' +
  38. ", coursePPT='" + coursePPT + '\'' +
  39. ", courseArticle='" + courseArticle + '\'' +
  40. ", courseVideo='" + courseVideo + '\'' +
  41. ", courseQA='" + courseQA + '\'' +
  42. '}';
  43. }
  44. }

教练类:

  1. package com.geely.design.pattern.creational.builder;
  2.  
  3. public class Coach {
  4. CourseBuilder courseBuilder;
  5.  
  6. public void setCourseBuilder(CourseBuilder courseBuilder) {
  7. this.courseBuilder = courseBuilder;
  8. }
  9. public Course makeCourse(String courseName, String coursePPT, String courseArticle, String courseVideo, String courseQA){
  10. this.courseBuilder.buildCourseName(courseName);
  11. this.courseBuilder.buildCourseArticle(courseArticle);
  12. this.courseBuilder.buildCourseVideo(courseVideo);
  13. this.courseBuilder.buildCoursePPT(coursePPT);
  14. this.courseBuilder.buildCourseQA(courseQA);
  15. return this.courseBuilder.makeCourse();
  16. }
  17. }

建造实现类:

  1. package com.geely.design.pattern.creational.builder;
  2.  
  3. public class CourseActualBuilder extends CourseBuilder{
  4.  
  5. private Course course = new Course();
  6. @Override
  7. public void buildCourseName(String courseName) {
  8. course.setCourseName(courseName);
  9. }
  10.  
  11. @Override
  12. public void buildCoursePPT(String coursePPT) {
  13. course.setCoursePPT(coursePPT);
  14. }
  15.  
  16. @Override
  17. public void buildCourseArticle(String courseArticle) {
  18. course.setCourseArticle(courseArticle);
  19. }
  20.  
  21. @Override
  22. public void buildCourseVideo(String courseVideo) {
  23. course.setCourseVideo(courseVideo);
  24. }
  25.  
  26. @Override
  27. public void buildCourseQA(String courseQA) {
  28. course.setCourseQA(courseQA);
  29. }
  30.  
  31. @Override
  32. public Course makeCourse() {
  33. return this.course;
  34. }
  35. }

建造抽象类:

  1. package com.geely.design.pattern.creational.builder;
  2.  
  3. /**
  4. * 这里使用 抽象类,完全是我练手用的,用实时接口也可以
  5. */
  6. public abstract class CourseBuilder{
  7.  
  8. public abstract void buildCourseName(String courseName);
  9. public abstract void buildCoursePPT(String coursePPT);
  10. public abstract void buildCourseArticle(String courseArticle);
  11. public abstract void buildCourseVideo(String courseVideo);
  12. public abstract void buildCourseQA(String courseQA);
  13.  
  14. public abstract Course makeCourse();
  15.  
  16. }

打印结果:

  1. "C:\Program Files\Java\jdk1.7.0_79\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=12439:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\design_pattern\target\classes" com.geely.design.pattern.creational.builder.Test
  2. Course{courseName='设计模式', coursePPT='设计模式PPT', courseArticle='设计模式标题', courseVideo='设计模式视频', courseQA='设计模式课程问答'}
  3.  
  4. Process finished with exit code 0
1.2  静态内部类演练建造者模式(链式调用)

uml类图:

和1.1 区别:
1.2  可以少设值,而1.1不可以

自己理解:

静态内部类builder有5个属性,课程类有相同的5个属性,链式调用的时候,给builder全部或者部分赋值,build的时候,把builder对象传送到course,course获取到builder的属性,然后返回这个course;

测试类:

  1. package com.geely.design.pattern.creational.builder.v2;
  2.  
  3. public class Test {
  4. public static void main(String [] args){
  5. Course.CourseBuilder courseBuilder = new Course.CourseBuilder();
  6. Course course = courseBuilder.buildCourseName("设计模式课程标题").buildCourseVideo("设计模式视频").build();
  7. System.out.println(course);
  8. }
  9. }

课程类:(静态内部类链式调用)

  1. package com.geely.design.pattern.creational.builder.v2;
  2.  
  3. public class Course {
  4. private String courseName;
  5. private String coursePPT;
  6. private String courseArticle;
  7. private String courseVideo;
  8. private String courseQA;
  9.  
  10. public Course(CourseBuilder courseBuilder){
  11. this.courseName = courseBuilder.courseName;
  12. this.courseArticle = courseBuilder.courseArticle;
  13. this.coursePPT = courseBuilder.coursePPT;
  14. this.courseVideo = courseBuilder.courseVideo;
  15. this.courseQA = courseBuilder.courseQA;
  16. }
  17.  
  18. /**
  19. * toString方法,为了方便测试,打印对象的时候,能够打印出对象的属性
  20. * @return
  21. */
  22. @Override
  23. public String toString() {
  24. return "Course{" +
  25. "courseName='" + courseName + '\'' +
  26. ", coursePPT='" + coursePPT + '\'' +
  27. ", courseArticle='" + courseArticle + '\'' +
  28. ", courseVideo='" + courseVideo + '\'' +
  29. ", courseQA='" + courseQA + '\'' +
  30. '}';
  31. }
  32.  
  33. /**
  34. * 编写静态内部类,实现链式调用
  35. */
  36. public static class CourseBuilder{
  37. private String courseName;
  38. private String coursePPT;
  39. private String courseArticle;
  40. private String courseVideo;
  41. private String courseQA;
  42.  
  43. public CourseBuilder buildCourseName(String courseName) {
  44. this.courseName = courseName;
  45. return this;
  46. }
  47.  
  48. public CourseBuilder buildCoursePPT(String coursePPT) {
  49. this.coursePPT = coursePPT;
  50. return this;
  51. }
  52.  
  53. public CourseBuilder buildCourseArticle(String courseArticle) {
  54. this.courseArticle = courseArticle;
  55. return this;
  56. }
  57.  
  58. public CourseBuilder buildCourseVideo(String courseVideo) {
  59. this.courseVideo = courseVideo;
  60. return this;
  61. }
  62.  
  63. public CourseBuilder buildCourseQA(String courseQA) {
  64. this.courseQA = courseQA;
  65. return this;
  66. }
  67.  
  68. public Course build(){
  69. return new Course(this);
  70. }
  71.  
  72. }
  73. }

打印日志:

  1. "C:\Program Files\Java\jdk1.7.0_79\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=13237:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\design_pattern\target\classes" com.geely.design.pattern.creational.builder.v2.Test
  2. Course{courseName='设计模式课程标题', coursePPT='null', courseArticle='null', courseVideo='设计模式视频', courseQA='null'}
  3.  
  4. Process finished with exit code 0

设计模式课程 设计模式精讲 7-2 建造者模式Coding的更多相关文章

  1. 设计模式课程 设计模式精讲 13-2 享元模式coding

    1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 每周由随机部门经历做报告: 重点关注: a 该案例是单例模式和享元模式共同使用 b 外部传入的department是外部状态 ...

  2. 设计模式课程 设计模式精讲 11-2 装饰者模式coding

    1 代码演练 1.1 代码演练1(未使用装饰者模式) 1.2 代码演练2(使用装饰者模式) 1 代码演练 1.1 代码演练1(未使用装饰者模式) 需求: 大妈下班卖煎饼,加一个鸡蛋加一元,一个火腿两元 ...

  3. 设计模式课程 设计模式精讲 7-3 建造者模式源码解析(jdk+guava+spring+mybaties)

    1 源码解析 1.1 jdk解析 1.2 guava解析 1.3 spring解析 1.4 mybaties解析 1 源码解析 1.1 jdk解析 String public StringBuilde ...

  4. 设计模式课程 设计模式精讲 17-2 模板方法模式coding

    1 代码演练 1.1 代码演练1 1.2 代码演练2(后端课程子类运用钩子方法,加入写手记的方法) 1.3 代码演练3(前端有多个子类,有得需要写手记,有得不需要写,如何实现?) 1 代码演练 1.1 ...

  5. JAVA设计模式 4【创建型】理解建造者模式

    Hello,又是拖了几天更,实在是忙的要死,有时候忙累了,真的就是倒头睡的那种,刚好今天闲下来了.今天来更新一篇建造者模式. 其实建造者模式,我们已经在上一节已经有了解过了.只不过是上一节没有提到这样 ...

  6. CSharp设计模式读书笔记(6):建造者模式(学习难度:★★★★☆,使用频率:★★☆☆☆)

    建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 模式角色与模式: 建造者模式可以将一个产品的内部表象与产品的生产过程分割开来, ...

  7. 设计模式课程 设计模式精讲 6-2 抽象工厂coding

    1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...

  8. 设计模式课程 设计模式精讲 18-2 迭代器模式coding

    1 代码演练 1.1 代码演练1(迭代器模式演练) 1.2 代码使用场景 1 代码演练 1.1 代码演练1(迭代器模式演练) 需求: 课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表. u ...

  9. 设计模式课程 设计模式精讲 5-2 工厂方法coding

    1 课堂讲义 1.1 产品等级和产品簇 2 代码演练 2.1 工厂方法代码演练 1 课堂讲义 1.1 产品等级和产品簇 工厂方法是为了解决同一产品等级的业务抽象问题 抽象工厂方法是为了解决同一产品簇的 ...

随机推荐

  1. 洛谷 P3865 【模板】ST表(模板)

    嗯... 题目链接:https://www.luogu.com.cn/problem/P3865 ST(Sparse Table)算法,运用了倍增的思想. 我们令f[i][k]数组表示区间[i, i ...

  2. MySQL主从复制原理的是啥?

    主库将变更写binlog日志,然后从库连接到主库之后,从库有一个IO线程,将主库的binlog日志拷贝到自己本地,写入一个中继日志中. 接着从库中有一个SQL线程会从中继日志读取binlog,然后执行 ...

  3. 如何使html中的元素不被选中

    有时候,为了提高用户的体验度,需要使网页中的部分内容防误操作,不被选中,比如今天的商城项目中的一个细节部分: + —号其实是a标签做的,当连续点击多次,就会使符号被选中,这样感觉起来不太好,于是查找解 ...

  4. 卸载mysql时,提示libmysqlclient.so.16()(64bit) is needed by (installed) postfix

    卸载时,提示错误,用这个命令就可以rpm -e --nodeps mysql-libs-5.1.73-5.el6_6.x86_64(这个是自己要卸载的版本) [root@unaryhost dev]# ...

  5. 用for循环写这段代码

    之前用while循环写了一段代码,现在改为用for循环来写,代码如下: hongtao_age = 38 for i in range(5): guess_age = int(input(" ...

  6. 吴裕雄--天生自然TensorFlow2教程:链式法则

    import tensorflow as tf x = tf.constant(1.) w1 = tf.constant(2.) b1 = tf.constant(1.) w2 = tf.consta ...

  7. 从零搭建vue+express开发环境

    1.express,vue运行环境,2建express项目,3建vue项目,4将vue项目(3)输出文件拷贝到express静态根目录里 一:---------PC全局安装express 和 vue- ...

  8. Update(Stage4):spark_rdd算子:第2节 RDD_action算子_分区_缓存:缓存、Checkpoint

    4. 缓存 概要 缓存的意义 缓存相关的 API 缓存级别以及最佳实践 4.1. 缓存的意义 使用缓存的原因 - 多次使用 RDD 需求: 在日志文件中找到访问次数最少的 IP 和访问次数最多的 IP ...

  9. Android基础 -- Activity之间传递数据(bitmap和map对象)

    原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...

  10. Tomcat 配置目录及文件说明!

    ==================================================================================