原文地址:https://jaune162.blog/design-pattern/builder-pattern/
引言
現(xiàn)在一般大型的業(yè)務(wù)系統(tǒng)中的消息通知的形式都會(huì)有多種,比如短信、站內(nèi)信、釘釘通知、郵箱等形式。雖然信息內(nèi)容相同,但是展現(xiàn)形式缺不同。如短信使用的是純文本的形式,釘釘使用的一般是Markdown的形式,而郵箱則使用HTML形式。那如何處理這種差異呢?
建造者模式就是一個(gè)很好的選擇,使用不同的建造者,來(lái)構(gòu)造不同的消息。
定義及實(shí)現(xiàn)
建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它可以讓你構(gòu)建復(fù)雜對(duì)象時(shí)更加靈活和可控。這種模式的主要目的是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
在軟件開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到一些復(fù)雜的對(duì)象,這些對(duì)象通常由多個(gè)部分組成,而且每個(gè)部分的創(chuàng)建和組合可能需要花費(fèi)大量的時(shí)間和精力。為了解決這個(gè)問(wèn)題,我們可以使用建造者模式來(lái)簡(jiǎn)化對(duì)象的構(gòu)建過(guò)程。
建造者模式的核心思想是將復(fù)雜對(duì)象的構(gòu)建過(guò)程分解為多個(gè)簡(jiǎn)單的步驟,每個(gè)步驟負(fù)責(zé)創(chuàng)建一個(gè)特定的部分。這些步驟被封裝在一個(gè)單獨(dú)的類中,稱為“建造者”(Builder)。通過(guò)這種方式,我們可以逐步構(gòu)建復(fù)雜對(duì)象,同時(shí)保持代碼的可讀性和可維護(hù)性。
定義
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
結(jié)構(gòu)
很多書(shū)或者博文中介紹建造者模式的時(shí)候都說(shuō)需要有一個(gè) Director
類,然后在這個(gè)類中完成構(gòu)建過(guò)程。這種情況適用于只需要順序調(diào)用Builder的各個(gè)方法,即可完成構(gòu)建過(guò)程的情況,或者說(shuō)Builder的各個(gè)方法無(wú)參。
關(guān)于這種結(jié)構(gòu)更多細(xì)節(jié)可以參考:https://refactoring.guru/design-patterns/builder文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-830175.html
代碼實(shí)現(xiàn)
具體代碼中,使用 AbstractMessageBuilder
抽象 title
和 addLine
方法,因?yàn)樵?個(gè)Builder中,這兩個(gè)方法的處理邏輯是一致的,不同的只有 build
方法。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-830175.html
@Data
public class Message {
private String title;
private String content;
}
public interface MessageBuilder {
void title(String title);
void addLine(String label, String desc);
Message build();
}
@Getter
public class Line {
private final String label;
private final String desc;
public Line(String label, String desc) {
this.label = label;
this.desc = desc;
}
}
public abstract class AbstractMessageBuilder implements MessageBuilder {
protected String title;
protected List<
到了這里,關(guān)于建造者模式-Builder Pattern的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!