представлять
Командный режим определяется как: используется для инкапсуляции запроса в объект, чтобы вы могли параметризовать клиента с помощью разных запросов; очередь или запросы журнала, и выполните отзывные операции. Другими словами, режим изменения предназначен для инкапсуляции вызова, запроса и работы функции в один объект, а затем выполнить серию обработки на объекте. Кроме того, объект команды и приемный объект могут быть отделены, вызывая объекты, которые реализуют конкретные функции.
текст
Давайте покажем этот шаблон через программу покупки транспортных средств, сначала определяя конкретный класс покупки транспортных средств:
Кода -копия выглядит следующим образом:
$ (function () {
var carmanager = {
// запросить информацию
requestInfo: function (model, id) {
вернуть информацию для ' + model +
'с id' + id + 'Is foobar';
},
// купить машину
BuyVehicle: Function (Model, ID) {
вернуть 'вы успешно купили товар'
+ id + ', a' + model;
},
// Организовывать представление
ArancementViking: function (Model, ID) {
вернуть 'вы успешно забронировали взгляд на'
+ model + '(' + id + ')';
}
};
}) ();
Давайте посмотрим на приведенный выше код. Мы просто выполняем команды менеджера, вызывая функции. Однако в некоторых случаях мы не хотим напрямую вызывать методы внутри объекта. Это увеличит зависимость между объектами. Теперь давайте расширим этот карманер, чтобы принять любые запросы на обработку от объектов Carmanager, включая модель и идентификатор автомобиля. Согласно определению шаблона команды, мы надеемся реализовать следующие вызовы функций:
Кода -копия выглядит следующим образом:
Carmanager.execute ({commandType: "buyvehicle", operand1: 'ford Escort', operand2: '453543'});
Согласно этому требованию, мы можем реализовать метод Carmanager.execute таким образом:
Кода -копия выглядит следующим образом:
Carmanager.execute = function (command) {
return carmanager [command.request] (command.model, command.carid);
};
После преобразования звонок намного проще, и могут быть реализованы следующие вызовы (конечно, некоторые детали исключения все еще должны быть улучшены):
Кода -копия выглядит следующим образом:
Carmanager.execute ({запрос: "Arrangeviewing", Model: 'ferrari', carid: '145523'});
Carmanager.execute ({запрос: "requestInfo", модель: 'ford mondeo', carid: '543434'});
Carmanager.execute ({запрос: "requestInfo", модель: 'ford Escort', carid: '543434'});
Carmanager.execute ({запрос: "buyvehicle", модель: 'Ford Escort', carid: '543434'});
Суммировать
Командный режим проще разработать очередь команд, и при необходимости легче подсчитывать команды в журнале, и позволяет стороне, которая принимает запрос, решить, позвонить ли ему, а также может реализовать отзыв и сброс запроса. Более того, поскольку дополнительные конкретные классы не влияют на другие классы, их легко реализовать.
Но принцип гибкого развития говорит нам не добавлять на основе предположений и фактически нежелательные функции в код. Если вы не уверены, нужен ли системе командный режим, вы, как правило, не должны торопиться, чтобы реализовать ее. На самом деле, не сложно реализовать этот режим, когда он требуется. Основное, что имеет смысл рефактор исходного кода в командный режим, когда он действительно требуется, например, отмену, восстановление операций и другие функции.