@VtzzzZZ

Как уточнять поведение объекта, при использовании паттерна Фабрика вместо Классов?

Допустим я использую следующий код для создания объекта newCar :
const vehicleFactory = function (config) {

    const MoveBehaivor = {
        move(){
            console.log('move')
        }
    }

    const vehicle = Object.assign({},MoveBehaivor)

    return vehicle 
}

let newCar = vehicleFactory()
newCar.move()	// 'move'


Здесь все просто - задаем поведение , создаем объект (если надо то с параметрами из конфига) и возвращаем

Теперь вносим изменение в фабрику так , чтобы начать производить танки .
При этом нам надо чтобы вновь созданный объект танк бладал тем же методом .move() но при этом более специализированным (уточненным).
Можно ввести обект TankMoveBehaivor с полностью переопределенным методом move() и использовать его :
const vehicleFactory = function (config) {

    const MoveBehaivor = {
        move(){
            console.log('move')
        }
    }

    const TankMoveBehaivor = {
        move(){
            console.log('move')
            console.log('as tank')	// отличие от метода для автомобилей
        }
    }

    switch (config.type) {
        case 'car' :

        const car = Object.assign({},MoveBehaivor)
    
        return car
    
        case  'tank' :

        const vehicle = Object.assign({},TankMoveBehaivor)

        return vehicle
    }
}


Но если метод move() большой и сложный то при дублировании его получится много повторного кода , чего конечно хотелось бы избежать

При использовании классовой нотации можно было бы создать class Vehicle от которого class Car и class Tank унаследовали бы метод move(),
уточняя его при необходимости.

Как сделать тоже самое используя только вышеописанный паттерн ?
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы