小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 頭號碼甲 2021-08-12

定義:

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

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

 

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

實(shí)例:

替答到。我也不知道怎么就想到了這個。上課的時候,老師點(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)。
這個我在實(shí)際應(yīng)用中暫時沒有遇到相關(guān)的實(shí)例,書中說到的保存游戲進(jìn)度算一個,但我自己開發(fā)中暫時還沒遇到。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多