<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    設(shè)計(jì)模式之學(xué)習(xí) Memento模式

    一、Memento模式的目的:

    memento是一個(gè)保存另外一個(gè)對(duì)象內(nèi)部狀態(tài)拷貝的對(duì)象.這樣以后就可以將該對(duì)象恢復(fù)到原先保存的狀態(tài).

    二、Memento模式的簡(jiǎn)單例子:

    下面的例子來(lái)源于Jdon網(wǎng)站的《GoF設(shè)計(jì)模式系列》的《Memento模式》,雖然簡(jiǎn)單卻形象地表明了Memento模式的應(yīng)用

    package com.pattern.memento2;

    /**
     * 原始對(duì)象
     * 
     * 
    @author zdw
     * 
     
    */

    public class Originator
    {
        
    private int age;
        
    private String name;

        
    public Memento getMemento()
        
    {
            
    return new Memento(this);
        }

        
    //取出Memento中先前保存的數(shù)據(jù),恢復(fù)為初始狀態(tài)
        public void setMemento(Memento m)
        
    {
            
    this.setAge(m.getAge());
            
    this.setName(m.getName());
        }


        
    public int getAge()
        
    {
            
    return age;
        }


        
    public void setAge(int age)
        
    {
            
    this.age = age;
        }


        
    public String getName()
        
    {
            
    return name;
        }


        
    public void setName(String name)
        
    {
            
    this.name = name;
        }

    }


    package com.pattern.memento2;
    /***
     * 備忘錄對(duì)象
     * 
    @author zdw
     *
     
    */

    public class Memento
    {
        
    private int age;
        
    private String name;

        
    public Memento(Originator o)
        
    {
            
    this.age = o.getAge();
            
    this.name = o.getName();
        }


        
    public int getAge()
        
    {
            
    return age;
        }


        
    public void setAge(int age)
        
    {
            
    this.age = age;
        }


        
    public String getName()
        
    {
            
    return name;
        }


        
    public void setName(String name)
        
    {
            
    this.name = name;
        }

    }

    測(cè)試類:
    package com.pattern.memento2;

    public class Client
    {

        
    public static void main(String[] args)
        
    {
            Originator o 
    = new Originator();
            o.setAge(
    18);
            o.setName(
    "馬云");

            o.setMemento(
    new Memento(o));

            Memento m 
    = o.getMemento();

            o.setAge(
    88);
            o.setName(
    "God");
            
    // o對(duì)象的先前值
            System.out.println(m.getAge() + "\n" + m.getName());
            
    // o對(duì)象的新值
            System.out.println(o.getAge() + "\n" + o.getName());
        }


    }


    三、Memento模式的特點(diǎn):

    在需要提供保存、恢復(fù)對(duì)象狀態(tài)的類中,必須提供兩個(gè)方法:

    .保存對(duì)象當(dāng)前狀態(tài)方法:將對(duì)象自身(this)作為參數(shù)傳入,創(chuàng)建備忘錄。
    .恢復(fù)對(duì)象之前狀態(tài)的方法:取出備忘錄/接收一個(gè)備忘錄對(duì)象,從中獲取對(duì)象之前的狀態(tài)

    模式的缺點(diǎn)是耗費(fèi)大,如果內(nèi)部狀態(tài)很多,再保存一份,無(wú)意要浪費(fèi)大量?jī)?nèi)存.

    注意:Memento模式保存的是操作前對(duì)象的狀態(tài),而不是操作后對(duì)象的狀態(tài);否則就沒(méi)辦法做恢復(fù)了



    posted on 2008-06-11 15:48 々上善若水々 閱讀(644) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

    主站蜘蛛池模板: 亚洲无人区视频大全| 亚洲精品无码久久不卡| 亚洲免费二区三区| 久久久精品2019免费观看| 99爱免费观看视频在线| 亚洲美女免费视频| 永久免费av无码不卡在线观看| 91成年人免费视频| 一二三四视频在线观看中文版免费| 欧美男同gv免费网站观看| 成人免费午间影院在线观看| 日韩一区二区三区免费体验| 国产男女猛烈无遮挡免费网站| 在线a亚洲v天堂网2018| 久久精品国产精品亚洲| 久久精品国产精品亚洲色婷婷| 久久久久亚洲av无码专区导航 | 91免费福利精品国产| 最近免费2019中文字幕大全| 无码国产精品一区二区免费式影视| 日韩精品福利片午夜免费观着| 免费看片A级毛片免费看| 亚洲国产免费综合| 亚洲成AV人在线观看天堂无码| 亚洲综合在线成人一区| 亚洲日韩一区精品射精| 免费看黄网站在线看 | 亚洲色大成WWW亚洲女子| 美女视频黄a视频全免费网站色| 国产精品玖玖美女张开腿让男人桶爽免费看| 国产一区二区三区免费观看在线 | 日本黄页网址在线看免费不卡 | 亚洲av成人中文无码专区| jizz18免费视频| 97在线视频免费| 日韩免费在线观看| 亚洲色欲一区二区三区在线观看| 亚洲熟妇无码久久精品| 国产精品亚洲一区二区在线观看| 韩日电影在线播放免费版| 美女视频黄的全免费视频|