1    代码演练

1.1  建造者模式演练

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

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

需求:

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

重点:

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

uml类图:

测试类:

package com.geely.design.pattern.creational.builder;

public class Test {
public static void main(String [] args){
Coach coach = new Coach();
Course course = new Course();
CourseBuilder courseBuilder = new CourseActualBuilder();
coach.setCourseBuilder(courseBuilder); course=coach.makeCourse("设计模式","设计模式PPT","设计模式标题","设计模式视频","设计模式课程问答");
System.out.println(course.toString());
}
}

实体课程类:

package com.geely.design.pattern.creational.builder;

public class Course {
private String courseName;
private String coursePPT;
private String courseArticle;
private String courseVideo;
private String courseQA; public void setCourseName(String courseName) {
this.courseName = courseName;
} public void setCoursePPT(String coursePPT) {
this.coursePPT = coursePPT;
} public void setCourseArticle(String courseArticle) {
this.courseArticle = courseArticle;
} public void setCourseVideo(String courseVideo) {
this.courseVideo = courseVideo;
} public void setCourseQA(String courseQA) {
this.courseQA = courseQA;
} /**
* toString方法,为了方便测试,进行打印
* @return
*/
@Override
public String toString() {
return "Course{" +
"courseName='" + courseName + '\'' +
", coursePPT='" + coursePPT + '\'' +
", courseArticle='" + courseArticle + '\'' +
", courseVideo='" + courseVideo + '\'' +
", courseQA='" + courseQA + '\'' +
'}';
}
}

教练类:

package com.geely.design.pattern.creational.builder;

public class Coach {
CourseBuilder courseBuilder; public void setCourseBuilder(CourseBuilder courseBuilder) {
this.courseBuilder = courseBuilder;
} public Course makeCourse(String courseName, String coursePPT, String courseArticle, String courseVideo, String courseQA){
this.courseBuilder.buildCourseName(courseName);
this.courseBuilder.buildCourseArticle(courseArticle);
this.courseBuilder.buildCourseVideo(courseVideo);
this.courseBuilder.buildCoursePPT(coursePPT);
this.courseBuilder.buildCourseQA(courseQA);
return this
.courseBuilder.makeCourse(); }
}

建造实现类:

package com.geely.design.pattern.creational.builder;

public class CourseActualBuilder extends CourseBuilder{

    private Course course = new Course();
@Override
public void buildCourseName(String courseName) {
course.setCourseName(courseName);
} @Override
public void buildCoursePPT(String coursePPT) {
course.setCoursePPT(coursePPT);
} @Override
public void buildCourseArticle(String courseArticle) {
course.setCourseArticle(courseArticle);
} @Override
public void buildCourseVideo(String courseVideo) {
course.setCourseVideo(courseVideo);
} @Override
public void buildCourseQA(String courseQA) {
course.setCourseQA(courseQA);
} @Override
public Course makeCourse() {
return this.course;
}
}

建造抽象类:

package com.geely.design.pattern.creational.builder;

/**
* 这里使用 抽象类,完全是我练手用的,用实时接口也可以
*/
public abstract class CourseBuilder{ public abstract void buildCourseName(String courseName);
public abstract void buildCoursePPT(String coursePPT);
public abstract void buildCourseArticle(String courseArticle);
public abstract void buildCourseVideo(String courseVideo);
public abstract void buildCourseQA(String courseQA); public abstract Course makeCourse(); }

打印结果:

"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
Course{courseName='设计模式', coursePPT='设计模式PPT', courseArticle='设计模式标题', courseVideo='设计模式视频', courseQA='设计模式课程问答'} 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;

测试类:

package com.geely.design.pattern.creational.builder.v2;

public class Test {
public static void main(String [] args){
Course.CourseBuilder courseBuilder = new Course.CourseBuilder();
Course course = courseBuilder.buildCourseName("设计模式课程标题").buildCourseVideo("设计模式视频").build();
System.out.println(course);
}
}

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

package com.geely.design.pattern.creational.builder.v2;

public class Course {
private String courseName;
private String coursePPT;
private String courseArticle;
private String courseVideo;
private String courseQA; public Course(CourseBuilder courseBuilder){
this.courseName = courseBuilder.courseName;
this.courseArticle = courseBuilder.courseArticle;
this.coursePPT = courseBuilder.coursePPT;
this.courseVideo = courseBuilder.courseVideo;
this.courseQA = courseBuilder.courseQA;
} /**
* toString方法,为了方便测试,打印对象的时候,能够打印出对象的属性
* @return
*/
@Override
public String toString() {
return "Course{" +
"courseName='" + courseName + '\'' +
", coursePPT='" + coursePPT + '\'' +
", courseArticle='" + courseArticle + '\'' +
", courseVideo='" + courseVideo + '\'' +
", courseQA='" + courseQA + '\'' +
'}';
} /**
* 编写静态内部类,实现链式调用
*/
public static class CourseBuilder{
private String courseName;
private String coursePPT;
private String courseArticle;
private String courseVideo;
private String courseQA; public CourseBuilder buildCourseName(String courseName) {
this.courseName = courseName;
return this;
} public CourseBuilder buildCoursePPT(String coursePPT) {
this.coursePPT = coursePPT;
return this;
} public CourseBuilder buildCourseArticle(String courseArticle) {
this.courseArticle = courseArticle;
return this;
} public CourseBuilder buildCourseVideo(String courseVideo) {
this.courseVideo = courseVideo;
return this;
} public CourseBuilder buildCourseQA(String courseQA) {
this.courseQA = courseQA;
return this;
} public Course build(){
return new Course(this
);
}
}
}

打印日志:

"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
Course{courseName='设计模式课程标题', coursePPT='null', courseArticle='null', courseVideo='设计模式视频', courseQA='null'} 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. hackinglab-脚本关1——key又又找不到了

    首先打开链接然后会发现是 然后用bp进行抓包然后会发现 然后点一下网页中的链接然后会发现 会发现抓包抓到一个地址 然后提示改一下网页的后缀地址  然后就得到了 key

  2. HyperLedger Fabric 资料网址大全

    BLOCKCHAIN FOR DEVELOPERS 官方网址 i. 这个网址是ibm给的测试网址,注册进去就可以设置4个节点的区块链,而且有智能合约可以测试 区块链和HyperLedger开源技术讲堂 ...

  3. 图片识别OCR:

    使用Python制作一个简易的OCR图片文字识别工具:键盘上的PrtScr按键+画图工具+百度AI图片识别(账户,调用接口)+python 常见的OCR工具: 1. Microsoft Onenote ...

  4. lucky 的 时光助理(3)

    今天lucky小姐哭笑不得的说, 昨天下班时跟经理一起走的时候, 地铁站手机被小偷偷走,那时一个人孤单单的,除了惊愕, 她不知道该去联系谁, 借了同事的手机,给家里打去电话. 她说,因为那是她唯一记得 ...

  5. P1217

    最快的办法就是打表了...不然怎么都会TLE. 先计算出给定最大范围内的所有回文质数: #include <bits/stdc++.h> using namespace std; #def ...

  6. dateTimepicker 设置默认日期的方法

    1.属性初始化设置 $('#beginDate').datetimepicker({ format: 'yyyy-mm-dd', language: 'zh-CN', weekStart: 1, to ...

  7. ubuntu 允许root用户登录到ssh

    ubuntu的系统太太太麻烦了,我喜欢centos,但是还是要用ubuntu做东西,讨厌,装完系统以后,因为他不让你用root,我新建了一个wqz的用户名. 1.首先更新root的密码 sudo pa ...

  8. JQuery选择器&过滤器

    JQuery对象: JQuery对象的本质上是DOM数组,它对DOM元素进行了封装 JQuery对象和JavaScript对象可以互转(\$()/$obj()[i]),但是JQuery对象和Javas ...

  9. Docker for YApi--一键部署YApi

    获取YApi镜像$ docker pull mrjin/yapi:latest 注意:本仓库目前只支持安装,暂不支持升级,请知晓.如需升级请备份mongoDB内的数据. docker-compose ...

  10. Redis数据存储结构之String

    前言: 在Redis使用中,我们最常使用的操作是set key value,或 get key value .这里面包含了redis最基本的数据类型:String,字符串类型是redis中最基本的类型 ...