最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python設(shè)計模式中的備忘錄模式

 更新時間:2022年02月15日 10:59:39   作者:范桂颶  
這篇文章主要為大家詳細介紹了Python設(shè)計模式中的備忘錄模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

備忘錄模式

備忘錄模式,在不破壞封閉的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復(fù)到原先保存的狀態(tài)。

簡單來說,就是在運行過程中我們可以記錄某個狀態(tài),當遇到錯誤時恢復(fù)當前狀態(tài),這在業(yè)務(wù)流程中是用設(shè)計來處理異常情況。

優(yōu)點

  • 有時一些發(fā)起人對象的內(nèi)部信息必須保存在發(fā)起人對象以外的地方,但是必須要由發(fā)起人對象自己讀取。這時,使用備忘錄模式可以把復(fù)雜的發(fā)起人內(nèi)部信息對其他的對象屏蔽起來,從而可以恰當?shù)乇3址庋b的邊界。
  • 本模式簡化了發(fā)起人。發(fā)起人不再需要管理和保存其內(nèi)部狀態(tài)的一個個版本,客戶端可以自行管理他們所需要的這些狀態(tài)的版本。
  • 當發(fā)起人角色的狀態(tài)改變的時候,有可能這個狀態(tài)無效,這時候就可以使用暫時存儲起來的備忘錄將狀態(tài)復(fù)原。

缺點

  • 如果發(fā)起人角色的狀態(tài)需要完整地存儲到備忘錄對象中,那么在資源消耗上面?zhèn)渫泴ο髸馨嘿F。
  • 當負責人角色將一個備忘錄存儲起來的時候,負責人可能并不知道這個狀態(tài)會占用多大的存儲空間,從而無法提醒用戶一個操作是否很昂貴。
  • 當發(fā)起人角色的狀態(tài)改變的時候,有可能這個協(xié)議無效。如果狀態(tài)改變的成功率不高的話,不如采取“假如”協(xié)議模式。

應(yīng)用場景

 

在這里插入圖片描述

實體角色:

Originator(發(fā)起人):負責創(chuàng)建一個 Memento(備忘錄),用以記錄當前時刻自身的內(nèi)部狀態(tài),并可使用備忘錄恢復(fù)內(nèi)部狀態(tài)。Originator 可以根據(jù)需要決定 Memento 存儲自己的哪些內(nèi)部狀態(tài)。

Memento(備忘錄):負責存儲 Originator 對象的內(nèi)部狀態(tài),并可以防止 Originator 以外的其他對象訪問備忘錄。備忘錄有兩個接口:

1.Caretaker 只能看到備忘錄的窄接口,他只能將備忘錄傳遞給其他對象。

2.Originator 卻可看到備忘錄的寬接口,允許它訪問返回到先前狀態(tài)所需要的所有數(shù)據(jù)。

Caretaker(管理者):負責 Memento,不能對 Memento 的內(nèi)容進行訪問或者操作。

代碼示例

class AddNumber:
    def __init__(self):
        self.start = 1
    def add(self, number):
        self.start += number
        print(self.start)

class Memento:
    """備忘錄"""
    def backups(self, obj=None):
        """
        設(shè)置備份方法
        :param obj: 
        :return: 
        """
        self.obj_dict = copy.deepcopy(obj.__dict__)
        print("備份數(shù)據(jù):{}".format(self.obj_dict))
    def recovery(self, obj):
        """
        恢復(fù)備份方法
        :param obj: 
        :return: 
        """
        obj.__dict__.clear()
        obj.__dict__.update(self.obj_dict)
        return obj

if __name__ == '__main__':
    test = AddNumber()
    memento = Memento()
    for i in [1, 2, 3, 'n', 4]:
        if i == 2:
            memento.backups(test)
        try:
            test.add(i)
        except TypeError as e:
            print(e)
            print(test.start)
    memento.recovery(test)
    print(test.start)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容! 

相關(guān)文章

  • python做翻譯軟件詳解,小白也看得明白

    python做翻譯軟件詳解,小白也看得明白

    這篇文章主要介紹了怎么樣用python做的翻譯軟件,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • PyTorch和Keras計算模型參數(shù)的例子

    PyTorch和Keras計算模型參數(shù)的例子

    今天小編就為大家分享一篇PyTorch和Keras計算模型參數(shù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python 改變數(shù)組類型為uint8的實現(xiàn)

    Python 改變數(shù)組類型為uint8的實現(xiàn)

    這篇文章主要介紹了Python 改變數(shù)組類型為uint8的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python?httpstat命令行工具功能使用探索

    Python?httpstat命令行工具功能使用探索

    Python?httpstat是一個強大的命令行工具,用于深入了解HTTP請求的性能和狀態(tài)信息,本文將介紹Python?httpstat的基本用法、功能特性、示例代碼以及實際應(yīng)用場景,幫助大家更好地理解和利用這個有用的工具
    2024-01-01
  • Python 打印中文字符的三種方法

    Python 打印中文字符的三種方法

    本文給大家分享三種方法實現(xiàn)python打印中文字符的方法,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-08-08
  • pycharm?console?打印中文為亂碼問題及解決

    pycharm?console?打印中文為亂碼問題及解決

    這篇文章主要介紹了pycharm?console?打印中文為亂碼問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 在Python中關(guān)于使用os模塊遍歷目錄的實現(xiàn)方法

    在Python中關(guān)于使用os模塊遍歷目錄的實現(xiàn)方法

    今天小編就為大家分享一篇在Python中關(guān)于使用os模塊遍歷目錄的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • numpy中meshgrid和mgrid的區(qū)別和使用詳解

    numpy中meshgrid和mgrid的區(qū)別和使用詳解

    本文主要介紹了numpy中meshgrid和mgrid的區(qū)別和使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Pygame實戰(zhàn)練習(xí)之一百層游戲

    Pygame實戰(zhàn)練習(xí)之一百層游戲

    跳上一百層想必是很多人童年時期的經(jīng)典游戲,我們依舊能記得抱個老人機娛樂的場景,下面這篇文章主要給大家介紹了關(guān)于如何利用python寫一個簡單的跳上一百層小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 使用Python將Mysql的查詢數(shù)據(jù)導(dǎo)出到文件的方法

    使用Python將Mysql的查詢數(shù)據(jù)導(dǎo)出到文件的方法

    今天小編就為大家分享一篇關(guān)于使用Python將Mysql的查詢數(shù)據(jù)導(dǎo)出到文件的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

北流市| 奉化市| 眉山市| 黄山市| 安塞县| 松滋市| 榆社县| 杭州市| 清水河县| 锦屏县| 永新县| 凌海市| 太康县| 石河子市| 项城市| 老河口市| 元江| 崇礼县| 柳河县| 大连市| 兰西县| 新田县| 饶河县| 额尔古纳市| 鹰潭市| 花莲市| 名山县| 廉江市| 海晏县| 温州市| 乌拉特后旗| 新泰市| 榆中县| 拜泉县| 依安县| 堆龙德庆县| 云南省| 天水市| 安阳市| 桐庐县| 青川县|