网站制作网络推广价格,百度搜索首页,网站开发存在的问题,qq空间怎么发布wordpress构建器设计模式以前我们看过工厂和抽象工厂模式。 这些模式可以达到目的#xff0c;并且确实有用#xff0c;但是在某些用例中#xff0c;我们必须创建一个非常复杂的对象#xff0c;并且创建它需要不同的步骤#xff0c;每个步骤都需要不同的操作。 在这种情况下#xf… 构建器设计模式 以前我们看过工厂和抽象工厂模式。 这些模式可以达到目的并且确实有用但是在某些用例中我们必须创建一个非常复杂的对象并且创建它需要不同的步骤每个步骤都需要不同的操作。 在这种情况下构建器模式可能非常有用。 构建器设计模式是一种创新设计模式可用于逐步创建复杂对象。 假设我们有一个具有许多依赖关系的对象并且为了获取每个依赖关系必须执行某些特定的操作。 在这种情况下我们可以使用构建器模式 将复杂对象的各个部分的创建和组装封装在一个单独的Builder对象中。 将对象创建委托给Builder对象而不是直接创建对象。 想象一下后端系统必须撰写和发送电子邮件的情况。 创建电子邮件可能是一个复杂的过程。 您必须指定标题设置收件人添加问候语和结束语。 您可能还想使用小胡子 。 有多种选择。 创建电子邮件所需的所有操作都只有一个班级这可能会使我们的班级肿并失去其初衷。 因此我们将从负责发送电子邮件的类开始。 package com.gkatzioura.design.creational.builder;public class Email {private final String title;private final String recipients;private final String message;public Email(String title, String recipients, String message) {this.title title;this.recipients recipients;this.message message;}public String getTitle() {return title;}public String getRecipients() {return recipients;}public String getMessage() {return message;}public void send() {}
} 如您所见该类仅包含三个字符串字段并且对它们没有任何额外的处理。 因此我们将创建一个构建器类该类将处理消息格式收件人表示形式和Email类的创建。 package com.gkatzioura.design.creational.builder;import java.util.HashSet;
import java.util.Set;public class EmailBuilder {private Set recipients new HashSet();private String title;private String greeting;private String mainText;private String closing;public EmailBuilder addRecipient(String recipient) {this.recipients.add(recipient);return this;}public EmailBuilder removeRecipient(String recipient) {this.recipients.remove(recipient);return this;}public EmailBuilder setTitle(String title) {this.title title;return this;}public EmailBuilder setGreeting(String greeting) {this.greeting greeting;return this;}public EmailBuilder setMainText(String mainText) {this.mainText mainText;return this;}public EmailBuilder setClosing(String closing) {this.closing closing;return this;}public Email create() {String message greeting\nmainText\nclosing;String recipientSection commaSeparatedRecipients();return new Email(title,recipientSection,message);}private String commaSeparatedRecipients() {StringBuilder sb new StringBuilder();for(String recipient:recipients) {sb.append(,).append(recipient);}return sb.toString().replaceFirst(,,);}} 下一步是使电子邮件创建更加严格以便只能通过EmailBuilder创建电子邮件。 package com.gkatzioura.design.creational.builder;import java.util.HashSet;
import java.util.Set;public class Email {private final String title;private final String recipients;private final String message;private Email(String title, String recipients, String message) {this.title title;this.recipients recipients;this.message message;}public String getTitle() {return title;}public String getRecipients() {return recipients;}public String getMessage() {return message;}public void send() {}public static class EmailBuilder {private Set recipients new HashSet();private String title;private String greeting;private String mainText;private String closing;public EmailBuilder addRecipient(String recipient) {this.recipients.add(recipient);return this;}public EmailBuilder removeRecipient(String recipient) {this.recipients.remove(recipient);return this;}public EmailBuilder setTitle(String title) {this.title title;return this;}public EmailBuilder setGreeting(String greeting) {this.greeting greeting;return this;}public EmailBuilder setMainText(String mainText) {this.mainText mainText;return this;}public EmailBuilder setClosing(String closing) {this.closing closing;return this;}public Email build() {String message greeting\nmainText\nclosing;String recipientSection commaSeparatedRecipients();return new Email(title,recipientSection,message);}private String commaSeparatedRecipients() {StringBuilder sb new StringBuilder();for(String recipient:recipients) {sb.append(,).append(recipient);}return sb.toString().replaceFirst(,,);}}
} 使用构建器模式创建电子邮件的最终结果将是这样。 Email email new Email.EmailBuilder().addRecipient(johnDoe.com).setMainText(Check the builder pattern).setGreeting(Hi John!).setClosing(Regards).setTitle(Builder pattern resources).build(); 总而言之通过使用构建器模式我们能够创建一个复杂的对象及其复杂的部分。 您可以在github上找到源代码。 在下一个博客中我们将讨论单例模式。 另外我还编写了备忘单其中包含“创作设计模式”的摘要。 在链接中注册以接收它。 翻译自: https://www.javacodegeeks.com/2018/03/creational-design-patterns-builder-pattern.html构建器设计模式