Builder 在JS中寫法
// Msg建造者模式
function MsgBuilder(source) {
// 初始數據
MsgBuilder.prototype.msg = source
// 分隔符
MsgBuilder.prototype.separation = ','
// 前綴
MsgBuilder.prototype.prefix = ''
// 屬性 getter/setter
MsgBuilder.prototype.setPrefix = function(prefix) {
this.prefix= prefix
return this
}
MsgBuilder.prototype.setSeparation = function(sep) {
this.separation = sep
return this
}
// 如果source存在, 將會append msg, hasPrefix決定是否需要加前綴
MsgBuilder.prototype.appendIfSourceNotPresent = function(source, msg, hasPrefix) {
if (hasPrefix == null || hasPrefix == undefined) {
hasPrefix = true
}
if (!source) {
if (hasPrefix) {
this.append(msg)
} else {
this.appendNotWithPrefix(msg)
}
}
return this
}
// append msg not with prefix
MsgBuilder.prototype.appendNotWithPrefix = function(msg) {
if (msg && msg != "") {
this.msg += this.msg ? (this.separation + msg)
: (msg)
}
return this
}
// append msg with prefix
MsgBuilder.prototype.append = function(msg) {
if (msg && msg != "") {
this.msg += this.msg ? (this.separation + this.prefix + msg)
: (this.prefix + msg)
}
return this
}
// 返回最終構造結果
MsgBuilder.prototype.build = function() {
return this.msg
}
}
與JQUERY集成
jQuery.extend({
// 返回一個MsgBuilder對象
msgBuilder : function (msg) {
if (!msg) {
msg = ''
}
return new MsgBuilder(msg)
}
});
應用
var msg = $.msgBuilder().setPrefix(atosUtil.getI18nMessage('spTran.applicant'))
.appendIfSourceNotPresent(custIdentType, atosUtil.getI18nMessage('spTran.identType'))
.appendIfSourceNotPresent(custIdentNo, atosUtil.getI18nMessage('spTran.identNo'))
.appendIfSourceNotPresent(custMobile, atosUtil.getI18nMessage('spTran.mobile'))
.appendNotWithPrefix(agentTipMsg).build()
最終效果(Builder成功完成Msg拼接)