企业网站源码asp,做公司网站需要准备什么资料,腾讯云网站备案不能用阿里云,做海报有什么借鉴的网站1 定义
建造者模式#xff08;Builder Pattern#xff09;使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式#xff0c;它提供了一种创建对象的最佳方式。
2 类图
产品类#xff08;Product#xff09;#xff1a;表示被创建的复杂…
1 定义
建造者模式Builder Pattern使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式它提供了一种创建对象的最佳方式。
2 类图
产品类Product表示被创建的复杂对象。它通常包含多个部分或者组成并由具体的建造者逐步构建而成。抽象建造者类Builder定义了建造复杂对象所需要的各个部分的创建方法。它通常包括多个构建方法和一个返回产品的方法。具体建造者类ConcreteBuilder实现Builder接口并提供各个部分或者组成的构建方法。调用者Director负责控制建造者的构建顺序指挥建造者如何构建复杂对象。 3 应用场景
生活中场景
去肯德基汉堡、可乐、薯条、炸鸡翅等是不变的而其组合是经常变化的生成出所谓的套餐。
java应用场景
StringBuilderappend()开放构造步骤最后toString()构造Lombok的Builder注解
使用场景
当一个类的构造函数参数个数超过4个而且这些参数有些是可选的参数考虑使用构造者模式。
4 代码案例
基本写法
首先创建一个产品类Course
public class Course {private String name;private String ppt;private String video;private String note;private String homework;Overridepublic String toString() {return CourseBuilder{ name name \ , ppt ppt \ , video video \ , note note \ , homework homework \ };}
}创建一个建造者类CourseBuilder
public class CourseBuilder{private Course course new Course();public void addName(String name) {course.setName(name);}public void addPPT(String ppt) {course.setPpt(ppt);}public void addVideo(String video) {course.setVideo(video);}public void addNote(String note) {course.setNote(note);}public void addHomework(String homework) {course.setHomework(homework);}public Course build() {return course;}
}调用
public class Test {public static void main(String[] args) {CourseBuilder builder new CourseBuilder();builder.addName(设计模式);builder.addPPT(【PPT课件】);builder.addVideo(【回放视频】);builder.addNote(【课堂笔记】);builder.addHomework(【课后作业】);System.out.println(builder.build());}
}责任链写法
修改 建造者类CourseBuilder
将产品类Course变为建造者类的内部类。将构造部分添加进去都返回CourseBuilderthis对象代码如下
public class CourseBuilder {private Course course new Course();public CourseBuilder addName(String name) {course.setName(name);return this;}public CourseBuilder addPPT(String ppt) {course.setPpt(ppt);return this;}public CourseBuilder addVideo(String video) {course.setVideo(video);return this;}public CourseBuilder addNote(String note) {course.setNote(note);return this;}public CourseBuilder addHomework(String homework) {course.setHomework(homework);return this;}public Course build() {return this.course;}Datapublic class Course {private String name;private String ppt;private String video;private String note;private String homework;Overridepublic String toString() {return CourseBuilder{ name name \ , ppt ppt \ , video video \ , note note \ , homework homework \ };}}
}5 与工厂模式区别
建造者模式注重new的过程工厂模式注重new的结果创建对象力度不同建造者模式创建复杂的对象由各种复杂的部件组成工厂模式创建出来的对象都一样
6 优缺点
优点
封装好创建和使用隔离扩展性好建造类之间独立一定程度上解耦
缺点
产生多余的Builder对象
如简单的可直接在Product构造而建造者模式需要多创建一个Builder对象
Product内部发生变化建造者都要修改
比如原本年龄属性是整数类型现在改为了字符串类型表示那么在建造者类中的设置年龄的方法就需要相应修改 v 搜【谷丘Coder】发送【建造者模式】获取笔记资料与思维导图