Меню

Паттерн Стратегия в JS

25.06.2018 - java script, NodeJS, ЯП

Strategy Pattern

Это когда Вам нужно выбрать конкретную реализацию во время выполнения.

Очень близок к паттерну «стратегия» — ErrorHandler.
Когда у Вас есть ErrorHandler вы также присматриваете путь чтобы залогить ошибки куда-нибудь. И исходя из типа ошибки, Вы можете инициализировать разные логгеры. Некоторые ошибки Вы хотите скрыть от пользователя. А некоторые Вы хотите красиво отобразить пользователю.
Но при всё при этом у них будет общий интерфейс.

Создадим класс ErrorHandler, который будет принимать обработчик в конструкторе.

//error-handler.js
export class ErrorHandler {
    constructor(handler) {
        if(!handler || !handler.handle) {
            throw new Error("Provided handle is invalid");
        }
        this.handler = handler;
    }
    handle(errorTitle, errorBody, errorObject) {
        this.handler.handle(errorTitle, errorBody);
        //do smth with errorObj
    }
}

//console-log-handler.js
export class ConsoleLogHandler {
    handle(errorTitle, errorBody) {
        console.error(errorTitle);
        console.log(errorBody);
    }
}

//toastr-handler.js
import * as toastr from 'toastr';

export class ToastrHandler {
    handle(title, body) {
        toastr.error(`${title} - ${body}`);
    }
}

//app.js
import {ErrorHandler} from './error-handler';
import {ConsoleLogHandler} from './console-log-handler';
import {ToastrHandler} from './toastr-handler';

function configureErrorHandler() {
    //let errorHandler = new ErrorHandler(new ConsoleLogHandler());
    let errorHandler = new ErrorHandler(new ToastrHandler());
    return errorHandler;
}

let errorHandler = configureErrorHandler();

try {
    throw new Error("Dummy Error");
} catch (err) {
    errorHandler.handle("Unknown Error", "Oops, seems like something went wrong", err);
}
Метки: , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *