Книги Українською Мовою » 💛 Інше » Занурення в патерни проектування, Олександр Швець 📚 - Українською

Читати книгу - "Занурення в патерни проектування, Олександр Швець"

В нашій бібліотеці можна безкоштовно в повній версії читати книгу онлайн українською мовою "Занурення в патерни проектування" автора Олександр Швець. Жанр книги: 💛 Інше. Наш веб сайт ReadUkrainianBooks.com дає можливість читати повні версії улюблених книг на Вашому гаджеті (IPhone, Android) або комп’ютері абсолютно безкоштовно, без реєстрації та СМС. Також маєте можливість завантажити книги на свій гаджет у форматі PDF, EPUB, FB2. Файли електронних книг - це цифрові файли, які призначені для перегляду на спеціальних пристроях, що відомі як читальні пристрої для електронних книг.

Шрифт:

-
+

Інтервал:

-
+

Добавити в закладку:

Добавити
1 ... 39 40 41 ... 58
Перейти на сторінку:
наявний код. // Абстрактна команда задає загальний інтерфейс для конкретних
// класів команд, а також містить реалізацію базової поведінки
// скасування операції.
abstract class Command is
  protected field app: Application
  protected field editor: Editor
  protected field backup: text

  constructor Command(app: Application, editor: Editor) is
    this.app = app
    this.editor = editor

  // Зберігаємо стан редактора.
  method saveBackup() is
    backup = editor.text

  // Відновлюємо стан редактора.
  method undo() is
    editor.text = backup

  // Головний метод команди залишається абстрактним, щоб кожна
  // конкретна команда визначила його по-своєму. Метод повинен
  // повернути true або false, залежно від того, чи змінила
  // команда стан редактора, а отже, чи потрібно її зберігати
  // в історії.
  abstract method execute()


// Конкретні команди.
class CopyCommand extends Command is
  // Команда копіювання не записується до історії, бо вона не
  // змінює стан редактора.
  method execute() is
    app.clipboard = editor.getSelection()
    return false

class CutCommand extends Command is
  // Команди, що змінюють стан редактора, зберігають стан
  // редактора перед своєю дією і сигналізують про зміну,
  // повертаючи true.
  method execute() is
    saveBackup()
    app.clipboard = editor.getSelection()
    editor.deleteSelection()
    return true

class PasteCommand extends Command is
  method execute() is
    saveBackup()
    editor.replaceSelection(app.clipboard)
    return true

// Відміна — це також команда.
class UndoCommand extends Command is
  method execute() is
    app.undo()
    return false


// Глобальна історія команд — це стек.
class CommandHistory is
  private field history: array of Command

  // Той, що зайшов останнім...
  method push(c: Command) is
    // Додати команду в кінець масиву-історії.

  // ...виходить першим.
  method pop():Command is
    // Дістати останню команду з масиву-історії.


// Клас редактора містить безпосередні операції над текстом. Він
// відіграє роль одержувача — команди делегують йому свої дії.
class Editor is
  field text: string

  method getSelection() is
    // Повернути вибраний текст.

  method deleteSelection() is
    // Видалити вибраний текст.

  method replaceSelection(text) is
    // Вкласти текст з буфера обміну в поточній позиції.


// Клас програми налаштовує об'єкти для спільної роботи. Він
// виступає у ролі відправника — створює команди, щоб виконати
// якісь дії.
class Application is
  field clipboard: string
  field editors: array of Editors
  field activeEditor: Editor
  field history: CommandHistory

  // Код, що прив'язує команди до елементів інтерфейсу, може
  // виглядати приблизно так.
  method createUI() is
    // ...
    copy = function() {executeCommand(
      new CopyCommand(this, activeEditor)) }
    copyButton.setCommand(copy)
    shortcuts.onKeyPress("Ctrl+C", copy)

    cut = function() { executeCommand(
      new CutCommand(this, activeEditor)) }
    cutButton.setCommand(cut)
    shortcuts.onKeyPress("Ctrl+X", cut)

    paste = function() { executeCommand(
      new PasteCommand(this, activeEditor)) }
    pasteButton.setCommand(paste)
    shortcuts.onKeyPress("Ctrl+V", paste)

    undo = function() { executeCommand(
      new UndoCommand(this, activeEditor)) }
    undoButton.setCommand(undo)
    shortcuts.onKeyPress("Ctrl+Z", undo)

  // Запускаємо команду й перевіряємо, чи потрібно додати її
  // до історії.
  method executeCommand(command) is
    if (command.execute())
      history.push(command)

  // Беремо останню команду з історії та змушуємо її все
  // скасувати. Ми не знаємо конкретний тип команди, але це і
  // не важливо, оскільки кожна команда знає, як скасувати
  // свою дію.
  method undo() is
    command = history.pop()
    if (command != null)
      command.undo() Засто­су­ва­ння

Якщо ви хоче­те пара­ме­три­зу­ва­ти об’єкти вико­ну­ва­ною дією.

Кома­нда пере­тво­рює опе­ра­ції на об’єкти, а об’єкти, у свою чергу, можна пере­да­ва­ти, збе­рі­га­ти та взає­мо­за­мі­ня­ти все­ре­ди­ні інших об’єктів.

Ска­жі­мо, ви роз­ро­бляє­те бібліо­те­ки гра­фі­чно­го меню і хоче­те, щоб кори­сту­ва­чі могли вико­ри­сто­ву­ва­ти меню в різних про­гра­мах, не змі­нюю­чи кожно­го разу код ваших кла­сів. Засто­су­ва­вши пате­рн, кори­сту­ва­чам не дове­де­ться змі­ню­ва­ти класи меню, замі­сть цього вони буду­ть конфі­гу­ру­ва­ти об’єкти меню різни­ми командами.

Якщо ви хоче­те поста­ви­ти опе­ра­ції в чергу, вико­ну­ва­ти їх за роз­кла­дом або пере­да­ва­ти мережею.

Як і будь-які інші об’єкти, кома­нди можна серіа­лі­зу­ва­ти, тобто пере­тво­ри­ти на рядок, щоб потім збе­ре­гти у файл або базу даних. Потім в будь-який зру­чний моме­нт його можна діста­ти назад, знову пере­тво­ри­ти на об’єкт кома­нди та вико­на­ти. Так само кома­нди можна пере­да­ва­ти мере­жею, логу­ва­ти або вико­ну­ва­ти на від­да­ле­но­му сервері.

Якщо вам потрі­бна опе­ра­ція скасування.

Голо­вна річ, яка потрі­бна для того, щоб мати можли­ві­сть ска­со­ву­ва­ти опе­ра­ції — це збе­рі­га­ння істо­рії. Серед бага­тьох спосо­бів реа­лі­за­ції цієї можли­во­сті пате­рн Кома­нда є, мабу­ть, найпо­пу­ля­рні­шим.

Істо­рія кома­нд вигля­дає як стек, до якого потра­пляю­ть усі вико­на­ні об’єкти кома­нд. Кожна кома­нда перед вико­на­нням опе­ра­ції збе­рі­гає пото­чний стан об’єкта, з яким вона пра­цю­ва­ти­ме. Після вико­на­ння опе­ра­ції копія кома­нди потра­пляє

1 ... 39 40 41 ... 58
Перейти на сторінку:

 Увага!

Сайт зберігає кукі вашого браузера. Ви зможете в будь-який момент зробити закладку та продовжити читання книги «Занурення в патерни проектування, Олександр Швець», після закриття браузера.

Коментарі та відгуки (0) до книги "Занурення в патерни проектування, Олександр Швець"