设计模式:建造者

定义与类型

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

适用场景

  • 如果一个对象有非常复杂的内部结构(很多的属性)
  • 想把复杂对象的创建和使用分离

优点

  • 封装性好,创建和使用分离
  • 扩展性好、建造类之间独立、一定程度上解耦

缺点

  • 产生多余的builder对象
  • 产品内部发生变化,建造者都要修改,成本较大

Coding

和工厂模式区别:建造者模式注重于方法的调用顺序,工厂模式注重于创建产品
建造者可以创建出复杂的商品,工厂创建出来的都是一个样,工厂模式注重只要把这个对象创建出来就ok了,建造者不仅要创建出这个产品,还要知道这个产品由那些部件组成

package com.jpg.creational.builder.v2;
//对于一个课程来说,由各种属性组成,比如:课程名称、PPT、视频、手记
//对于这种属性比较多的可以用建造者模式
public class Course {
	private String courseName;
	private String coursePPT;
	private String courseVideo;
	private String courseArticle;
	
	private String courseQA;
	
	public Course(CourseBuilder courseBuilder) {
		this.courseName = courseBuilder.courseName;
		this.coursePPT = courseBuilder.coursePPT;
		this.courseVideo = courseBuilder.courseVideo;
		this.courseArticle = courseBuilder.courseArticle;
	}

	@Override
	public String toString() {
		return "Courser [courseName=" + courseName + ", coursePPT=" + coursePPT + ", courseVideo=" + courseVideo
				+ ", courseArticle=" + courseArticle + ", courseQA=" + courseQA + "]";
	}
	
	public static class CourseBuilder {
		private String courseName;
		private String coursePPT;
		private String courseVideo;
		private String courseArticle;
		
		private String courseQA;
		
		public CourseBuilder buildCourseName(String courseName) {
			this.courseName = courseName;
			return this;
		}
		
		public CourseBuilder buildCoursePPT(String coursePPT) {
			this.courseName = coursePPT;
			return this;
		}
		
		public CourseBuilder buildCourseVideo(String courseVideo) {
			this.courseName = courseVideo;
			return this;
		}
		
		public CourseBuilder buildCourseArticle(String courseArticle) {
			this.courseName = courseArticle;
			return this;
		}
		
		public CourseBuilder buildCourseQA(String courseQA) {
			this.courseName = courseQA;
			return this;
		}
		
		public Course build() {
			return new Course(this);
		}
	}
~~--------------------------~~ 
package com.jpg.creational.builder.v2;

public class Test {

	public static void main(String[] args) {
		Course course = new Course.CourseBuilder().buildCourseName("Java设计模式课程").buildCoursePPT("Java设计模式PPT").buildCourseVideo("Java设计模式视频").buildCourseQA("Java设计模式QA").build();
		System.out.println(course);
	}
}

}

在这里插入图片描述

JDK源码解析

StringBuilder就是使用了建造者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值