美文网首页
几种设计模式

几种设计模式

作者: HIKALU | 来源:发表于2018-12-23 23:41 被阅读0次

创建类模式

<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;
  }

  /**
   * 将数据转换为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>

构造模式

<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;
    // ...

    // 如果是文科生:['政治', '历史', '地理']
    // 如果是理科生:['数学', '物理', '化学']
    this.subjects = subjects;
  }

  /**
   * 创建学生
   * @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, ['数学', '物理', '化学'])
        break;
      case '体育':
        return new Student(name, ['长跑', '...'])
        break;
      default:
        throw '没有这个专业,别瞎填';
    }
  }

  var whh = factory('王花花', '文科');
  var lsd = factory('李拴蛋', '理科');
  var zks = factory('赵可爽', '体育');
  var lbb = factory('刘备备', '撒盐');

  console.log(whh);
  console.log(lsd);
  console.log(zks);
</script>

相关文章

  • 003.单例模式

    接触学生的时候,总是在说设计模式很重要,至少应该知道几种设计模式?但是,也是给大家简简单单的介绍了几种!设计模式就...

  • 项目开发-------iOS设计模式

    iOS的设计模式大体可以分为以下几种设计模式 1.创建型:单例设计模式、抽象工厂设计模式 2.结构型:MVC 模式...

  • 面向对象中23种设计模式介绍

    什么是设计模式? 设计模式分为哪几种? 什么是设计模式? 设计模式的六大原则 1、开闭原则(Open Close ...

  • 单例模式

    单例设计模式是几种设计模式中比较容易理解的,手写单例模式也是面试频繁问到的。下面总结一下单例模式的几种写法: //...

  • Java的常用设计模式详解

    引言 说起设计模式,很多编程语言的设计模式大同小异,而且设计模式很多,这里介绍一下java的几种常见的设计模式,其...

  • 几种设计模式

    创建类模式 构造模式 工厂模式

  • 整理前端面试题(九) : 学员笔试真题- 附带真题卷下载地址

    1. 列举你用过的设计模式及其场景 在《JavaScript设计模式与开发实践》这本书中,介绍的设计模式有以下几种...

  • 容易混的结构型设计模式

    今天想起来几种结构型设计模式单从表面上或许不好区分,整理记录一下。 几种设计模式各有侧重点,模式之间的不同其实在于...

  • iOS Block 的理解及应用

    目前常用的几种设计模式有:代理模式、KVC模式、KVO模式、Block模式等这么多设计模式中 , 如果问哪一种使用...

  • iOS架构补完计划--设计模式

    目录 官方用到的几种设计模式代理模式(Proxy)观察者模式(Observer)单例模式(Singleton)工厂...

网友评论

      本文标题:几种设计模式

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