美文网首页
建造者模式

建造者模式

作者: 樱花舞 | 来源:发表于2020-06-29 15:26 被阅读0次

建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。在构建过程的每个方法可以返回构建对象实现链式结构来构建。

1、例子:发送邮件

发送邮件需要账号密码、发送人邮件地址、收件人地址、主题内容等,这些数据可以通过建造者模式来一步步构建完成到最后发送。
引入依赖包:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-email</artifactId>
    <version>1.5</version>
</dependency>
public class MailBuilder {
    private HtmlEmail htmlEmail = new HtmlEmail();

    /**
     * 邮件host
     *
     * @param hostName 不能为空
     * @return
     */
    public MailBuilder setHostName(String hostName) {
        htmlEmail.setHostName(hostName);
        return this;
    }

    /**
     * 发件人
     *
     * @param from 发件人地址 不能为空
     * @param name 发件人名称
     * @return
     * @throws EmailException
     */
    public MailBuilder setFrom(String from, String name) throws EmailException {
        htmlEmail.setFrom(from, name);
        return this;
    }

    /**
     * 发件人账号密码
     *
     * @param userName 不能为空
     * @param password 不能为空
     * @return
     */
    public MailBuilder setAuthentication(String userName, String password) {
        htmlEmail.setAuthentication(userName, password);
        return this;
    }

    /**
     * 收件人
     *
     * @param mails 邮件地址
     * @return
     * @throws EmailException
     */
    public MailBuilder addTo(String... mails) throws EmailException {
        if (mails != null && mails.length != 0) {
            htmlEmail.addTo(mails);
        }
        return this;
    }

    /**
     * 抄送
     *
     * @param mails 邮件地址
     * @return
     * @throws EmailException
     */
    public MailBuilder addCc(String... mails) throws EmailException {
        if (mails != null && mails.length != 0) {
            htmlEmail.addCc(mails);
        }
        return this;
    }

    /**
     * 密送
     *
     * @param mails 邮件地址
     * @return
     * @throws EmailException
     */
    public MailBuilder addBcc(String... mails) throws EmailException {
        if (mails != null && mails.length != 0) {
            htmlEmail.addBcc(mails);
        }
        return this;
    }

    /**
     * 主题
     *
     * @param subject
     * @return
     */
    public MailBuilder setSubject(String subject) {
        htmlEmail.setSubject(subject);
        return this;
    }

    /**
     * 文本内容
     *
     * @param msg
     * @return
     * @throws EmailException
     */
    public MailBuilder setTextMsg(String msg) throws EmailException {
        if (StringUtils.isNotEmpty(msg)) {
            htmlEmail.setTextMsg(msg);
        }
        return this;
    }

    /**
     * 添加附件
     *
     * @param url
     * @param name 带后缀
     * @param desc
     * @return
     * @throws EmailException
     */
    public MailBuilder setAttachment(URL url, String name, String desc) throws EmailException {
        if (url != null) {
            htmlEmail.attach(url, name, desc);
        }
        return this;
    }

    /**
     * 网页代码
     *
     * @param htmlMsg
     * @return
     * @throws EmailException
     */
    public MailBuilder setHtmlMsg(String htmlMsg) throws EmailException {
        if (StringUtils.isNotEmpty(htmlMsg)) {
            htmlEmail.setHtmlMsg(htmlMsg);
        }
        return this;
    }

    /**
     * 发送邮件
     *
     * @throws EmailException
     */
    public void send() throws EmailException {
        htmlEmail.send();
    }
}

使用例子:

MailBuilder mail = new MailBuilder();
        mail.setAuthentication("", "")
                .setFrom("", "")
                .setHostName("")
                .addTo("")
                .addBcc("")
                .addCc("")
                .setSubject("")
                .setHtmlMsg("")
                .setTextMsg("")
                .setAttachment(new URL(""), "", "")
                .send();

在每个方法中都返回构建的对象,可以实现链式结构,但这链式有点多,虽然结构清晰,但也不美观了。需要注意的是,上面的例子是线程不安全的,不要用作spring 的bean。

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

  • 建造者模式:深入理解建造者模式 ——组装复杂的实例

    目录: 一 建造者模式介绍 1.1 定义 1.2 为什么要用建造者模式(优点)? 1.3 哪些情况不要用建造者模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • 创建型模式:建造者模式

    个人公众号原文:创建型模式:建造者模式 五大创建型模式之四:建造者模式。 简介 姓名 :建造者模式 英文名 :Bu...

网友评论

      本文标题:建造者模式

      本文链接:https://www.haomeiwen.com/subject/riiofktx.html