不遵循既定设计模式(如单例、工厂或观察者)的代码可能导致耦合紧密、缺乏灵活性或代码重复等问题。
Copilot Chat 可以帮助你使用合适的设计模式,使代码更加灵活且易于维护。例如,它可以建议将重复的实例化转换为工厂模式,或使用观察者模式来解耦紧密连接的类。
注意
本文中描述的回复仅为示例。Copilot Chat 的回复是非确定性的,因此你可能会得到与此处显示不同的答案。
示例情景
这段 JavaScript 代码创建了三个 Person 对象,每个对象都有 name 和 age 属性。随后使用人的姓名来检索并打印其年龄。
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
What design patterns could improve this code? Don't show me code examples.
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");
What design patterns could improve this code? Don't show me code examples.
What design patterns could improve this code? Don't show me code examples.
示例响应 1
Copilot 建议以下模式
- 单例模式: 确保
people对象只有唯一实例。 - 工厂模式: 用于创建生成
Person对象的工厂。 - 模块模式: 将
people对象及相关函数封装在模块中,以避免污染全局命名空间。
示例提示 2
现在,你可以请求 Copilot 实现你认为最合适的模式。
Refactor this code using the module pattern
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");
Refactor this code using the module pattern
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");
模块模式改进了代码组织,增强了数据隐私,并降低了命名冲突的风险,使代码更易于维护和扩展。