建造者模式

一、定义

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

二、适用场景

复杂,多个属性。构建与表示需要分离。

三、缺点

产生多余的build。

四、代码

1)

public class Course {
	@Override
	public String toString() {
		return "Course [courseArticle=" + courseArticle + ", courseName="
				+ courseName + ", coursePPT=" + coursePPT + ", courseQA="
				+ courseQA + ", courseVideo=" + courseVideo + "]";
	}

	private String courseName;
	private String coursePPT;
	private String courseVideo;
	private String courseArticle;
	private String courseQA;

	public String getCourseName() {
		return courseName;
	}

	public void setCourseName(String courseName) {
		this.courseName = courseName;
	}

	public String getCoursePPT() {
		return coursePPT;
	}

	public void setCoursePPT(String coursePPT) {
		this.coursePPT = coursePPT;
	}

	public String getCourseVideo() {
		return courseVideo;
	}

	public void setCourseVideo(String courseVideo) {
		this.courseVideo = courseVideo;
	}

	public String getCourseArticle() {
		return courseArticle;
	}

	public void setCourseArticle(String courseArticle) {
		this.courseArticle = courseArticle;
	}

	public String getCourseQA() {
		return courseQA;
	}

	public void setCourseQA(String courseQA) {
		this.courseQA = courseQA;
	}

}
public abstract class CourseBuilder {
  public abstract void buildCourseName(String courseName);
  public abstract void buildCoursePPT(String coursePPT);
  public abstract void buildCourseVideo(String courseVideo);
  public abstract void buildCourseArticle(String courseArticle);
  public abstract void buildCourseQA(String courseQA);
  public abstract Course makeCourse();
}
public class CourseActualBuilder extends CourseBuilder {
   private Course course = new Course();
	@Override
	public void buildCourseArticle(String courseArticle) {
		course.setCourseArticle(courseArticle);
	}

	@Override
	public void buildCourseName(String courseName) {
		course.setCourseName(courseName);

	}

	@Override
	public void buildCoursePPT(String coursePPT) {
		course.setCoursePPT(coursePPT);

	}

	@Override
	public void buildCourseQA(String courseQA) {
		course.setCourseQA(courseQA);

	}

	@Override
	public void buildCourseVideo(String courseVideo) {
		// TODO Auto-generated method stub
         course.setCourseVideo(courseVideo);
	}

	@Override
	public Course makeCourse() {
		return course;
		
	}

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

 

public class Test {
  public static void main(String[] args){
	  CourseBuilder courseBuilder = new CourseActualBuilder();
	  Coach coach  = new Coach();
	  coach.setCourseBuilder(courseBuilder);
	  Course course = coach.makeCourse("java", "java video", "QA", "article",
			  "java ppt");
	  System.out.println(course.toString());
  }
}

2)采用静态内部类的方式

public class Course {
	private String courseName;
	private String coursePPT;
	private String courseVideo;
	private String courseArticle;
	private String courseQA;
	@Override
	public String toString() {
		return "Course [courseArticle=" + courseArticle + ", courseName="
				+ courseName + ", coursePPT=" + coursePPT + ", courseQA="
				+ courseQA + ", courseVideo=" + courseVideo + "]";
	}
	
	public Course(CourseBuilder courseBuilder) {
	 this.courseArticle = courseBuilder.courseArticle;
	 this.courseName = courseBuilder.courseName;
	 this.coursePPT = courseBuilder.coursePPT;
	 this.courseQA = courseBuilder.courseQA;
	 this.courseVideo = courseBuilder.courseVideo;
	}

	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.coursePPT = coursePPT;
			return this;
		}
		
		public CourseBuilder buildVideo(String courseVideo){
			this.courseVideo = courseVideo;
			return this;
		}
		public CourseBuilder buildCourseArticle(String courseArticle){
			this.courseArticle = courseArticle;
			return this;
		}
		public Course build(){
			return new Course(this);
		}
	} 
	
}

public class Test {
 public static void main(String[] args){
	 Course course = new Course.CourseBuilder().buildCourseName("java").build();
	 System.out.println(course);
 }
}




 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值