Філософія за схемою пам’яті


9

Я читав за шаблоном пам’яті з різних джерел Інтернету. Відмінність інформації з різних джерел залишила мене в замішанні щодо того, чому насправді ця модель потрібна.

Dofactory реалізація каже про те , що основною метою цього шаблону є відновлення стану системи.

Wiki каже, що основним завданням є можливість відновити зміни в системі. Це надає різний вплив - кажучи про те, що система може мати реалізацію пам’яті без відновлення. І ця здатність до відновлення є особливістю цього.

OODesign говорить про це

Іноді необхідно зафіксувати внутрішній стан об'єкта в якийсь момент і мати можливість відновити об'єкт до цього стану пізніше. Такий випадок корисний у випадку помилки чи відмови.

Отже, моє запитання: чому саме ми використовуємо цей? Це врятувати попередні стани - або сприяти інкапсуляції між Сторожкою та Мементо? Чому такий тип інкапсуляції настільки важливий?

Редагувати: Для тих, хто відвідує, ознайомтеся з цим впровадженням!

Редагувати : я працюю над впровадженням на згадку рішення моєї проблеми. Я опублікую ще одне запитання щодо цього і зв’яжу це питання з цим. Дякую всім за відповідь з цінними пропозиціями!

Правка 3 : Ось посилання на мою вибірку

Відповіді:


2

Аналогічна схема, Memo або Memoization, зберігає також стан, але часто використовується як оптимізація швидкості програми. Якщо трудомістка операція має обмежену кількість загальних входів і виходів, найпоширеніші (або всі вони) можуть зберігатися в хештеті. При повторному виклику з тими самими входами він спочатку перевіряє хеш-таблицю і, якщо їх знаходить, повертає попередній вихід, не перераховуючи його.

Я думаю, що модель Memento також може бути використана для продуктивності - замість того, щоб робити всі зворотні розрахунки для зміни зворотного стану, просто відновіть з попереднього стану. Деякі функції односторонні, тому скасування не відбувається, якщо ви не зберігаєте попередній стан.

Ви можете використовувати шаблон Memento, щоб запам'ятати періодичну або симетричну функцію, як синус. Обчисліть усі значення від 0-180 градусів, а потім пройдіться назад через них, щоб отримати від’ємні значення від 180-360. А ще краще, обчисліть значення від 0 до 90, потім перейдіть назад через ці значення, щоб отримати 90-180, вперед на 180-270 і назад від 270-360.

Ctrl-Z у Word, або функція скасування будь-якого програмного забезпечення, ймовірно, реалізується за допомогою шаблону пам’яті, або в деяких випадках, можливо, зворотом функції, яка вносила кожну зміну. У другому випадку історія функцій, яка називалася, була б пам'яттю, тому я припускаю, що шаблон пам’яті завжди використовується для скасування.


схема запам'ятовування, що використовується для уникнення зворотного обчислення та для періодичних функцій - дякую за цю інформацію! Нічого подібного до практичного прикладу, щоб проникнути поняття!
TheSilverBullet

Він також може бути використаний з чимось на зразок методу Ньютона для наближення квадратного кореня, щоб вирішити, коли ви закінчите. mitpress.mit.edu/sicp/full-text/book/… Оскільки базове представлення з плаваючою комою має обмежену точність, з часом усі числа матимуть повторювані наближення. Якщо ви знаєте, якими були старі наближення, ви можете зупинити наближення першого разу, коли ви повторите відповідь і отримаєте максимальну точність (за рахунок деякого часу та пам'яті).
GlenPeterson

8

Сама по собі Шаблон Memento просто використовується для зйомки та збереження станів. Інкапсуляція існує лише для захисту станів від решти системи - як тільки стан захоплено, його потрібно ретельно контролювати. Наприклад, не має сенсу змінювати попередній стан після його збереження (це буде зміна історії), і, можливо, не має сенсу просто повертатися до попереднього стану одного об'єкта, не зачіпаючи інших (щоб запобігти система переходу в абсолютно недійсний стан).

Найпоширеніше використання Memento, яке я бачив, - це підтримка функцій скасування. Це також пов'язано зі збереженням функціональності повтору, рухаючись назад уперед.


Я також використовував його в логіці копіювання та логіці серіалізації (для надсилання об'єктів по дроту або збереження стану у файл).
Скотт Вітлок

@ScottWhitlock Збереження стану у файлі має сенс для Memento. Об'єкт Memento мав би можливість записувати себе у визначений формат і створювати новий, читаючи цей формат, тоді як Caretaker надає інтерфейс для збереження стану у зовнішній формат або стан завантаження із зовнішнього формату - це просто розширення збереження стану в пам'яті. Я не можу реально бачити, як це використовується в логіці копіювання. Мені доведеться думати про це набагато більше.
Томас Оуенс


@ThomasOwens, дякую за ту важливу частину вашого пояснення, що пам’ятка - це в основному «збереження» станів. Відновлювати чи ні - це усмотрення виконавця! Я знайшов цю частину пояснення відсутнім у всіх моїх посиланнях !!
TheSilverBullet

@ScottWhitlock, дякую за посилання на вашу реалізацію! Я зміг зрозуміти не тільки його основне використання, але й інтуїтивне використання, як ви зробили!
TheSilverBullet

1

Усі ці визначення направляють вас в одному напрямку; всі вони говорять про те, щоб мати можливість відновити щось до попереднього стану. Щось може бути цілою системою або просто одним об’єктом.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.