{"meta":{"title":"重构以实现设计模式","intro":"副驾驶聊天 可以建议可用于改进代码的设计模式。","product":"GitHub Copilot","breadcrumbs":[{"href":"/zh/copilot","title":"GitHub Copilot"},{"href":"/zh/copilot/tutorials","title":"教程"},{"href":"/zh/copilot/tutorials/copilot-chat-cookbook","title":"GitHub Copilot Chat 指南"},{"href":"/zh/copilot/tutorials/copilot-chat-cookbook/refactor-code","title":"重构代码"},{"href":"/zh/copilot/tutorials/copilot-chat-cookbook/refactor-code/refactor-design-patterns","title":"重构设计模式"}],"documentType":"article"},"body":"# 重构以实现设计模式\n\n副驾驶聊天 可以建议可用于改进代码的设计模式。\n\n不遵循既定设计模式（如单例模式、工厂模式或观察者模式）的代码可能会导致紧耦合、缺乏灵活性或代码重复等问题。\n\n副驾驶聊天 可以帮助你运用合适的设计模式，使你的代码更具灵活性且更易于维护。 例如，它可以建议将重复性的实例化转换为工厂模式，或者使用观察者模式来分离紧密相连的类。\n\n> \\[!NOTE] 本文中所述的响应是示例。 副驾驶聊天 的回答是不确定的，因此你可能会得到与这里所显示的不同的回答。\n\n## 示例方案\n\n这段 JavaScript 代码创建了三个 `Person` 对象，每个对象都具有 `name` 和 `age` 属性。 然后它使用一个人的名字来检索并打印出其年龄。\n\n```javascript id=person-module\nclass Person {\n  constructor(name, age) {\n    this.name = name;\n    this.age = age;\n  }\n}\n\nvar people = {};\n\nfunction addPerson(name, age) {\n  people[name] = new Person(name, age);\n}\n\nfunction getAge(name) {\n  if (people[name]) {\n    console.log(name + \" is \" + people[name].age + \" years old.\");\n  } else {\n    console.log(\"Person not found.\");\n  }\n}\n\naddPerson(\"Ana\", 30);\naddPerson(\"Mario\", 25);\naddPerson(\"Louise\", 40);\n\ngetAge(\"Mario\");\n```\n\n## 示例提示 1\n\n```copilot copy prompt ref=person-module\nWhat design patterns could improve this code? Don't show me code examples.\n```\n\n## 示例响应 1\n\nCopilot 建议使用以下模式：\n\n* 单例模式\\*\\*\\*\\*：确保 `people` 对象只有一个实例。\n* 工厂模式\\*\\*\\*\\*：创建用于创建 `Person` 对象的工厂。\n* 模块模式\\*\\*\\*\\*：将 `people` 对象及相关函数封装在一个模块内，以避免污染全局命名空间。\n\n## 示例提示 2\n\n现在你可以要求 Copilot 实现你认为最合适的模式。\n\n```copilot copy prompt ref=person-module\nRefactor this code using the module pattern\n```\n\n## 示例响应 2\n\n```javascript\nconst PersonModule = (function() {\n  class Person {\n    constructor(name, age) {\n      this.name = name;\n      this.age = age;\n    }\n  }\n\n  const people = {};\n\n  function addPerson(name, age) {\n    people[name] = new Person(name, age);\n  }\n\n  function getAge(name) {\n    if (people[name]) {\n      console.log(name + \" is \" + people[name].age + \" years old.\");\n    } else {\n      console.log(\"Person not found.\");\n    }\n  }\n\n  return {\n    addPerson,\n    getAge\n  };\n})();\n\nPersonModule.addPerson(\"Ana\", 30);\nPersonModule.addPerson(\"Mario\", 25);\nPersonModule.addPerson(\"Louise\", 40);\n\nPersonModule.getAge(\"Mario\");\n```\n\n模块模式可改善代码组织，增强数据隐私，并降低命名冲突的风险，从而使代码更易于维护和缩放。\n\n## 其他阅读材料\n\n* [GitHub Copilot 对话助手的提示设计](/zh/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [使用 GitHub Copilot 的最佳做法](/zh/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}