Код, который не соответствует установленным шаблонам проектирования (например, Singleton, Factory или Observer), может привести к таким проблемам, как жесткое связывание, отсутствие гибкости или дублированный код.
помогает использовать соответствующие шаблоны проектирования, чтобы сделать код более гибким и поддерживаемым. Например, рекомендуется преобразовать повторяющиеся экземпляры в шаблон фабрики или использовать шаблон наблюдателя для тесного соединения классов.
Примечание.
Ответы, описанные в этой статье, являются примерами. Ответы являются недетерминированными, поэтому вы можете получить различные ответы, показанные здесь.
Пример сценария
Этот код 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.
Пример ответа 1
Copilot предлагает следующие шаблоны:
- Шаблон singleton: чтобы обеспечить наличие только одного экземпляра
people
объекта. - Шаблон фабрики: создание фабрики для создания
Person
объектов. - Шаблон модуля: чтобы инкапсулировать
people
объект и связанные функции в модуле, чтобы избежать загрязнения глобального пространства имен.
Пример запроса 2
Теперь можно попросить 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");
Шаблон модуля улучшает организацию кода, повышает конфиденциальность данных и снижает риск именования конфликтов, что делает код более поддерживаемым и масштабируемым.