免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
設(shè)計模式 |備忘錄模式(memento)

定義:

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

結(jié)構(gòu):(書中圖,侵刪)

 

Originator:需要備份的類(寫在便簽上的內(nèi)容)
Memento:備份類,里面包含部分或全部Originator的屬性(便簽紙)
Caretaker:真正保存?zhèn)浞莸牡胤剑ū愫灱堎N的地方)

實例:

替答到。我也不知道怎么就想到了這個。上課的時候,老師點(diǎn)名,如果你要幫同學(xué)答到,那么你就需要先將自己的名字藏起來,換成你同學(xué)的名字,等替他答完了,你再換回自己名字。(我并沒有在教壞小朋友,還請同學(xué)們乖乖自己去上課)
 
學(xué)生類:
package designpattern.memento;

public class Student {
    private String name;// 姓名
    private String major;// 專業(yè)
    private String studentNo;// 學(xué)號

    public Student(String name, String major, String studentNo) {
        super();
        this.name = name;
        this.major = major;
        this.studentNo = studentNo;
    }

    public Memento createMemento() {
        return new Memento(this.name, this.major);
    }

    public void restoreMemento(Memento memento) {
        this.name = memento.getName();
        this.major = memento.getMajor();
    }

    public String getName() {
        return name;
    }

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

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getStudentNo() {
        return studentNo;
    }

    public void setStudentNo(String studentNo) {
        this.studentNo = studentNo;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", major=" + major + ", studentNo=" + studentNo + "]";
    }

}
備忘錄類:
package designpattern.memento;

public class Memento {
    private String name;
    private String major;

    public Memento(String name, String major) {
        super();
        this.name = name;
        this.major = major;
    }

    public String getName() {
        return name;
    }

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

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

}
保存類:
package designpattern.memento;

public class CareTaker {
    private Memento memento;

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }

}
客戶端:
package designpattern.memento;

public class Client {
    public static void main(String[] args) {
        Student student = new Student("郝鑫仁", "計算機(jī)", "1234");
        CareTaker careTaker = new CareTaker();
        careTaker.setMemento(student.createMemento());
        System.out.println(student);

        System.out.println("開始點(diǎn)名...");

        // 偽裝成其他同學(xué)
        student.setName("齊步萊");
        student.setMajor("自動化");
        System.out.println(student);

        System.out.println("點(diǎn)名結(jié)束");

        // 變回自己
        student.restoreMemento(careTaker.getMemento());
        System.out.println(student);

    }
}
結(jié)果輸出:
Student [name=郝鑫仁, major=計算機(jī), studentNo=1234]
開始點(diǎn)名...
Student [name=齊步萊, major=自動化, studentNo=1234]
點(diǎn)名結(jié)束
Student [name=郝鑫仁, major=計算機(jī), studentNo=1234]

總結(jié):

備忘錄模式就是用于臨時存儲類的一部分信息,以便它能回到存儲前的狀態(tài)。
這個我在實際應(yīng)用中暫時沒有遇到相關(guān)的實例,書中說到的保存游戲進(jìn)度算一個,但我自己開發(fā)中暫時還沒遇到。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
設(shè)計模式23:Memento Pattern (備忘錄模式)
java-Memento模式的缺點(diǎn)
備忘錄模式(memento)解析例子
設(shè)計模式之備忘錄(Memento Pattern)模式
C#設(shè)計模式(23)——備忘錄模式(Memento Pattern)
設(shè)計模式之備忘錄模式
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服