簡單工廠模式

簡單工廠模式

需求: 原生js實現一個登陸驗證的提示,當用戶輸入用戶名或者密碼不正確時,給出提示

var LoginAlert = function (text) {
  this.content = text
}
LoginAlert.prototype.show = function () {
  alert(this.content)
}
​
var userNameAlert = new LoginAlert('用戶名不能多於16個字母和數字')
userNameAlert.show()
​
var pasWordAlert = new LoginAlert('輸入密碼不正確')
pasWordAlert.show()

 

新需求: 再加一個註冊按鈕,同樣進行輸入框的驗證

var RegisterAlert = function (text) {
  this.content = text
}
RegisterAlert.prototype.show = function () {
  alert(this.content)
}
​
var RegisterFailedAlert = new RegisterAlert('用戶名已存在,請重新輸入')
RegisterFailedAlert.show()

 

新需求: 再添加一個登錄成功的提示框

var LoginPrompt = function (text) {
  this.content = text
}
LoginPrompt.prototype.show = function () {
  alert(this.content)
}
var loginSuccess = new LoginPrompt('登錄成功,填寫今天的心情吧~~~')
loginSuccess.show()

 

點評: 這麼寫已經能夠滿足於需求,只是比較零散,如果將上述類封裝在一個類,複用重複性代碼,然後調用一個類,從而實現需求的功能,豈不是好?

var Factory = function (name) {
  switch (name) {
    case 'alert':
      return new LoginAlert();
    case 'register':
      return new RegisterAlert()
    case 'LoginPrompt':
      return new LoginPrompt()
  }
}

 

點評:上述代碼雖然將多個類封裝在一個函數裏面,但是存在大量的重複性代碼,可以繼續優化下

var LoginValid = function (tips) {
  this.content = tips
}
LoginValid.prototype.show = function () {
  alert(this.content)
}
var FactoryFun = function (type, tips) {
  var obj = new Object();
  obj.content = tips;
  obj.show = function () {
    alert(this.content)
  }
  if (type === 'alert') {
​
  }
  if (type === 'register') {
​
  }
  if (type === 'LoginPrompt') {
​
  }
  return obj
}
​
var loginInstance = FactoryFun('alert', '用戶名輸入錯誤')
loginInstance.show()

 

點評: 上述代碼相對首次書寫定義多個類進行驗證是不是優雅很多呢? 提供一個工廠函數,根據傳入參數判斷類型、提示語。 在團隊項目開發,我們應該儘可能少的創建全局變量。同一類對象的不同需求,重複性代碼可以提取出來,代碼複用是面向對象編程的一條準則;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章