幾種設計模式

創(chuàng)建類模式

<table id="roster"></table>

<script>
  var rootElement = document.getElementById('roster');

  function Student(name, gender, score) {
    this.name = name;
    this.gender = gender;
    this.score = score;
    this.quality = 100;

    this.mount();
  }

  Student.prototype.sumScore = function () {
    return this.score + this.quality;
  }

  /**
   * 將數(shù)據(jù)轉(zhuǎn)換為HTML并插入到表格中
   */
  Student.prototype.mount = function () {
    var tr = document.createElement('tr');
    tr.innerHTML =
      '<td>' + this.name + '</td>' +
      '<td>' + this.gender + '</td>' +
      '<td>' + this.score + '</td>' +
      '<td>' + this.quality + '</td>' +
      '<td>' + this.sumScore() + '</td>'
    ;

    rootElement.appendChild(tr);
  }

  var whh = new Student('王花花', '男', 98);
  var lsd = new Student('李拴蛋', '女', 50);
</script>

構(gòu)造模式

<script>
  let studentCount = 0;

  class Student {
  }

  class StudentBuilder {
    constructor() {
      this.student = new Student();
    }

    setName(name) {
      this.student.name = name;
    }

    setGender(gender) {
      if (gender != '男' && gender != '女')
        throw '好玩不';

      this.student.gender = gender;
    }

    setHairLength(hairLength) {
      if (
        (this.student.gender == '男' && hairLength > 1) ||
        (this.student.gender == '女' && hairLength > 25)
      ) throw '回去剪頭';

      this.student.hairLength = hairLength;
    }

    build() {
      studentCount++;
      console.log(studentCount);
      return this.student;
    }
  }

  const builder = new StudentBuilder();
  builder.setName('王花花');
  builder.setGender('男');
  builder.setHairLength(1);
  const whh = builder.build();

  const builder2 = new StudentBuilder();
  builder2.setName('李拴蛋');
  builder2.setGender('女');
  builder2.setHairLength(20);
  const lsd = builder2.build();

  console.log(lsd);
</script>

工廠模式

<script>
  function Student(name, subjects) {
    this.name = name;
    // ...

    // 如果是文科生:['政治', '歷史', '地理']
    // 如果是理科生:['數(shù)學', '物理', '化學']
    this.subjects = subjects;
  }

  /**
   * 創(chuàng)建學生
   * @param {string} name 姓名
   * @param {string} type 文科還是理科
   * @return {Student}
   */
  function factory(name, type) {

    switch (type) {
      case '文科':
        return new Student(name, ['政治', '歷史', '地理'])
        break;
      case '理科':
        return new Student(name, ['數(shù)學', '物理', '化學'])
        break;
      case '體育':
        return new Student(name, ['長跑', '...'])
        break;
      default:
        throw '沒有這個專業(yè),別瞎填';
    }
  }

  var whh = factory('王花花', '文科');
  var lsd = factory('李拴蛋', '理科');
  var zks = factory('趙可爽', '體育');
  var lbb = factory('劉備備', '撒鹽');

  console.log(whh);
  console.log(lsd);
  console.log(zks);
</script>
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • ios開發(fā)學習中,經(jīng)常弄不清楚ios的開發(fā)模式,今天我們就來進行簡單的總結(jié)和探討~(一)代理模式應用場景:當一個類...
    貝勒老爺閱讀 1,313評論 1 8
  • 目前常用的幾種設計模式:代理模式、觀察者模式、MVC模式、單例模式、策略模式、工廠模式、MVVM (一)代理 場景...
    Taureau_2d81閱讀 266評論 0 0
  • 目前常用的幾種設計模式:代理模式、觀察者模式、MVC模式、單例模式、策略模式、工廠模式、MVVM (一)代理 場景...
    多一點微笑_閱讀 3,991評論 0 4
  • (一)代理 場景:當一個類的某些功能需要由別的類來實現(xiàn),但是又不確定具體會是哪個類實現(xiàn)。 優(yōu)勢:解耦合 敏捷原則:...
    CDLOG閱讀 294評論 0 0
  • 一、單例模式(有的書上說叫單態(tài)模式其實都一樣) 該模式主要目的是使內(nèi)存中保持1個對象。看下面的例子: 方法一 方法...
    coffee_0ca0閱讀 692評論 0 4