跳至主要内容

通过实现设计模式进行重构

Copilot Chat 可以推荐可用于改进代码的设计模式。

不遵循既定设计模式(如单例、工厂或观察者)的代码可能导致耦合紧密、缺乏灵活性或代码重复等问题。

Copilot Chat 可以帮助你使用合适的设计模式,使代码更加灵活且易于维护。例如,它可以建议将重复的实例化转换为工厂模式,或使用观察者模式来解耦紧密连接的类。

注意

本文中描述的回复仅为示例。Copilot Chat 的回复是非确定性的,因此你可能会得到与此处显示不同的答案。

示例情景

这段 JavaScript 代码创建了三个 Person 对象,每个对象都有 nameage 属性。随后使用人的姓名来检索并打印其年龄。

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

var people = {};

function addPerson(name, age) {
  people[name] = new Person(name, age);
}

function getAge(name) {
  if (people[name]) {
    console.log(name + " is " + people[name].age + " years old.");
  } else {
    console.log("Person not found.");
  }
}

addPerson("Ana", 30);
addPerson("Mario", 25);
addPerson("Louise", 40);

getAge("Mario");

示例提示 1

Copilot 提示
What design patterns could improve this code? Don't show me code examples.

示例响应 1

Copilot 建议以下模式

  • 单例模式: 确保 people 对象只有唯一实例。
  • 工厂模式: 用于创建生成 Person 对象的工厂。
  • 模块模式:people 对象及相关函数封装在模块中,以避免污染全局命名空间。

示例提示 2

现在,你可以请求 Copilot 实现你认为最合适的模式。

Copilot 提示
Refactor this code using the module pattern

示例响应 2

const PersonModule = (function() {
  class Person {
    constructor(name, age) {
      this.name = name;
      this.age = age;
    }
  }

  const people = {};

  function addPerson(name, age) {
    people[name] = new Person(name, age);
  }

  function getAge(name) {
    if (people[name]) {
      console.log(name + " is " + people[name].age + " years old.");
    } else {
      console.log("Person not found.");
    }
  }

  return {
    addPerson,
    getAge
  };
})();

PersonModule.addPerson("Ana", 30);
PersonModule.addPerson("Mario", 25);
PersonModule.addPerson("Louise", 40);

PersonModule.getAge("Mario");

模块模式改进了代码组织,增强了数据隐私,并降低了命名冲突的风险,使代码更易于维护和扩展。

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.