Я хочу использовать шаблон фабричного дизайна в своем приложении и использовать некоторые его преимущества, такие как читаемость, гибкость, масштабируемость, инкапсуляция и правильное связывание «this» оператора »во время разработки. Поскольку мое приложение генерирует HTML-код при загрузке В моем случае важна производительность и использование памяти для создания объектов. Пожалуйста, посмотрите на следующий пример:
// Factory Design with Delegation
const car = function( color )
{
const CarPrototype = function( color )
{
const carPrototype = {};
carPrototype.color = color;
// Private function
function internal()
{
console.log( "internal" );
// ...
}
// Public function
carPrototype.gas = function()
{
internal();
// ...
}
carPrototype.brake = function()
{
// ...
}
return carPrototype;
}
return Object.create( CarPrototype( color ) );
}
// Traditional constructor function
const Car = function( color )
{
this.color = color;
// ...
}
Car.prototype.internal = function()
{
console.log( "internal" );
// ...
}
Car.prototype.gas = function()
{
this.internal();
// ...
}
Car.prototype.brake = function()
{
// ...
}
function myFunction()
{
const mazdaF = car( "red" );
const mazdaT = new Car( "red" );
console.log( mazdaF, mazdaT );
}
<html>
<head></head>
<body onload="myFunction()">
</body>
</html>
Результат выполнения вышеуказанного кода показан ниже.
Кроме того, здесь показан результат теста производительности Результат производительности .
Я хочу знать, использую ли я правильный шаблон для моего случая или нет. В случае, что я должен сделать, чтобы улучшить производительность?
ОБНОВЛЕНИЕ:
Теперь я немного запутался по поводу заводского шаблона выше. Я думаю, что когда я использую Object.create( CarPrototype( color ) )
, я создаю совершенно новый автомобильный объект и возвращаю объект, который его прототип связал с этим автомобильным объектом. Поэтому, если я создам 1000 автомобильных объектов, у меня будет 1000 автомобильных прототипов вместо одного прототипа с 1000 ссылками на делегирование. Я прав? Если это правда, может кто-нибудь объяснить мне, как это исправить?