中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

o2o網(wǎng)站開發(fā)框架長(zhǎng)春seo排名優(yōu)化

o2o網(wǎng)站開發(fā)框架,長(zhǎng)春seo排名優(yōu)化,鞍山58同城二手房,企業(yè)名稱預(yù)先核準(zhǔn)網(wǎng)上申請(qǐng)系統(tǒng)【聲明】本題目來源于卡碼網(wǎng)(題目頁面 (kamacoder.com)) 【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到C編碼部分】 【設(shè)計(jì)模式大綱】 【簡(jiǎn)介】 -- 什么是備忘錄模式 (第17種模式) 備忘錄模式(Meme…

【聲明】本題目來源于卡碼網(wǎng)(題目頁面 (kamacoder.com))

【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到C++編碼部分】


【設(shè)計(jì)模式大綱】


【簡(jiǎn)介】

? ? ? ? -- 什么是備忘錄模式?(第17種模式)

????????備忘錄模式(Memento Pattern)是?種?為型設(shè)計(jì)模式,它允許在不暴露對(duì)象實(shí)現(xiàn)的情況下捕獲對(duì)象的內(nèi)部狀態(tài)并在對(duì)象之外保存這個(gè)狀態(tài),以便稍后可以將其還原到先前的狀態(tài)。


【基本結(jié)構(gòu)】

????????備忘錄模式包括以下?個(gè)重要??:

  • 發(fā)起?Originator : 需要還原狀態(tài)的那個(gè)對(duì)象,負(fù)責(zé)創(chuàng)建?個(gè)【備忘錄】,并使?備忘錄記錄當(dāng)前時(shí)刻的內(nèi)部狀態(tài)。
  • 備忘錄Memento : 存儲(chǔ)發(fā)起?對(duì)象的內(nèi)部狀態(tài),它可以包含發(fā)起?的部分或全部狀態(tài)信息,但是對(duì)外部是不可?的,只有發(fā)起?能夠訪問備忘錄對(duì)象的狀態(tài)。

????????備忘錄有兩個(gè)接?,發(fā)起?能夠通過寬接?訪問數(shù)據(jù),管理者只能看到窄接?,并將備忘錄傳遞給其他對(duì)象。

  • 管理者Caretaker : 負(fù)責(zé)存儲(chǔ)備忘錄對(duì)象,但并不了解其內(nèi)部結(jié)構(gòu),管理者可以存儲(chǔ)多個(gè)備忘錄對(duì)象。
  • 客戶端:在需要恢復(fù)狀態(tài)時(shí),客戶端可以從管理者那?獲取備忘錄對(duì)象,并將其傳遞給發(fā)起?進(jìn)?狀態(tài)的恢復(fù)。


【基本實(shí)現(xiàn)】

下面以Java代碼作以簡(jiǎn)要說明:

1.?創(chuàng)建發(fā)起?類:可以創(chuàng)建備忘錄對(duì)象

class Originator {private String state;public void setState(String state) {this.state = state;}public String getState() {return state;}// 創(chuàng)建備忘錄對(duì)象public Memento createMemento() {return new Memento(state);}// 通過備忘錄對(duì)象恢復(fù)狀態(tài)public void restoreFromMemento(Memento memento) {state = memento.getState();}
}

2.?創(chuàng)建備忘錄類:保存發(fā)起?對(duì)象的狀態(tài)

class Memento {private String state;// 保存發(fā)起?的狀態(tài)public Memento(String state) {this.state = state;}public String getState() {return state;}
}

3.?創(chuàng)建管理者:維護(hù)?組備忘錄對(duì)象

class Caretaker {private List<Memento> mementos = new ArrayList<>();public void addMemento(Memento memento) {mementos.add(memento);}public Memento getMemento(int index) {return mementos.get(index);}
}

4.?客戶端使用備忘錄模式

/**
* @version Copyright (c) 2024 NCDC, Servo。 Unpublished - All rights reserved
* @file MementoMode.hpp
* @brief 備忘錄模式
* @autor 寫代碼的小恐龍er
* @date 2024/01/19
*/
public class Main {public static void main(String[] args) {// 創(chuàng)建發(fā)起?對(duì)象Originator originator = new Originator();originator.setState("State 1");// 創(chuàng)建管理者對(duì)象Caretaker caretaker = new Caretaker();// 保存當(dāng)前狀態(tài)caretaker.addMemento(originator.createMemento());// 修改狀態(tài)originator.setState("State 2");// 再次保存當(dāng)前狀態(tài)caretaker.addMemento(originator.createMemento());// 恢復(fù)到先前狀態(tài)originator.restoreFromMemento(caretaker.getMemento(0));System.out.println("Current State: " + originator.getState());}
}

【使用場(chǎng)景】

????????備忘錄模式在保證了對(duì)象內(nèi)部狀態(tài)的封裝和私有性前提下可以輕松地添加新的備忘錄和發(fā)起?,實(shí)現(xiàn)“備份”,不過備份對(duì)象往往會(huì)消耗較多的內(nèi)存,資源消耗增加。

????????備忘錄模式常常?來實(shí)現(xiàn)撤銷和重做功能,?如在Java Swing GUI編程中,javax.swing.undo 包中的撤銷(undo)和重做(redo)機(jī)制使?了備忘錄模式。UndoManager 和UndoableEdit 接?是與備忘錄模式相關(guān)的主要類和接?。


【C++編碼部分】

1. 題目描述

????????小明正在設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)數(shù)器應(yīng)用,支持增加(Increment)和減少(Decrement)操作,以及撤銷(Undo)和重做(Redo)操作,請(qǐng)你使用備忘錄模式幫他實(shí)現(xiàn)。

2. 輸入描述

????????輸入包含若干行,每行包含一個(gè)字符串,表示計(jì)數(shù)器應(yīng)用的操作,操作包括 "Increment"、 "Decrement"、"Undo" 和 "Redo"。

3. 輸出描述

????????對(duì)于每個(gè) "Increment" 和 "Decrement" 操作,輸出當(dāng)前計(jì)數(shù)器的值,計(jì)數(shù)器數(shù)值從0開始 對(duì)于每個(gè) "Undo" 操作,輸出撤銷后的計(jì)數(shù)器值。 對(duì)于每個(gè) "Redo" 操作,輸出重做后的計(jì)數(shù)器值。

4. C++編碼實(shí)例

/**
* @version Copyright (c) 2024 NCDC, Servo。 Unpublished - All rights reserved
* @file MementoMode.hpp
* @brief 備忘錄模式
* @autor 寫代碼的小恐龍er
* @date 2024/01/19
*/#include <iostream>
#include <string>
#include <vector>
#include <stack>using namespace std;// 前置聲明// 備忘錄類 -- 保存發(fā)起?對(duì)象的狀態(tài)
class Memento;
// 發(fā)起人類 -- 可以創(chuàng)建備忘錄對(duì)象
class Counter;
// 管理者 -- 一組備忘錄對(duì)象
class MementoManager;// 類的定義// 備忘錄類
class Memento
{
// 成員數(shù)據(jù)
private:int _value;// 備忘錄操作的成員函數(shù)
public:Memento(int value){SetValue(value);}void SetValue(int value){this->_value = value;}int GetValue(){return this->_value;}
};// 發(fā)起人 類
class Counter
{
// 成員數(shù)據(jù)
private:int _value;//  發(fā)起人的計(jì)數(shù)值std::stack<Memento *> _undoStack; // 發(fā)起人撤銷操作的棧 std::stack<Memento *> _redoStack; // 發(fā)起人重新操作的棧// 成員函數(shù) 
public:Counter(){}// 獲取值int GetValue(){return this->_value;}// 增加計(jì)數(shù)值void IncreaseValue(Memento *memento){//清空重做的棧while(!_redoStack.empty()){_redoStack.pop();}_undoStack.push(memento);_value++;}// 減少計(jì)數(shù)值void DecreaseValue(Memento *memento){//清空重做的棧while(!_redoStack.empty()){_redoStack.pop();}_undoStack.push(memento);_value--;}// 撤銷操作void Undo(Memento *memento){if(!_undoStack.empty()){_redoStack.push(memento);_value = _undoStack.top()->GetValue();}}// 重新操作void Redo(Memento *memento){if(!_redoStack.empty()){_undoStack.push(memento);_value = _redoStack.top()->GetValue();}}
};// 管理者 
class MementoManager
{
// 成員數(shù)據(jù)
private:std::vector<Memento *> _mementoVec;// 成員函數(shù)
public:// 增加備忘錄void AddMemento(Memento *mento){_mementoVec.push_back(mento);}// 尋找備忘錄 按照順序 或者 備忘錄中的計(jì)數(shù)值Memento * GetMemento(int index){if(index >= _mementoVec.size()) return nullptr;else return _mementoVec[index];}
};// 客戶端
int main()
{// 操作類型string type = "";// 新建 發(fā)起人 類 Counter *counter = new Counter();// 新建備忘錄管理者M(jìn)ementoManager *manager = new MementoManager();// 新建備忘錄Memento *memento = nullptr;// 等待輸入指令while(std::cin >> type){if(type == "Increment"){memento = new Memento(counter->GetValue());counter->IncreaseValue(memento);}else if(type == "Decrement"){memento = new Memento(counter->GetValue());counter->DecreaseValue(memento);}else if(type == "Undo"){memento = new Memento(counter->GetValue());counter->Undo(memento);}else if(type == "Redo"){memento = new Memento(counter->GetValue());counter->Redo(memento);}// 將備忘錄添加至管理者中 【此時(shí)備忘錄管理者可以去做其他的事情】manager->AddMemento(memento);// 輸出計(jì)數(shù)器的值std::cout<< counter->GetValue() << endl;}// 析構(gòu)if(memento != nullptr){delete memento;memento = nullptr;}delete counter;counter = nullptr;delete manager;manager = nullptr;return 0;
}


......

To be continued.

http://www.risenshineclean.com/news/35784.html

相關(guān)文章:

  • 東莞哪家做網(wǎng)站比較好北京網(wǎng)上推廣
  • 做有網(wǎng)被視頻網(wǎng)站有哪些銷售平臺(tái)軟件有哪些
  • 成都網(wǎng)站搭建公司哪家好阿里大數(shù)據(jù)分析平臺(tái)
  • 網(wǎng)站建設(shè)丨找王科杰專業(yè)好的seo網(wǎng)站
  • 怎樣做網(wǎng)站外鏈seo的中文意思
  • 怎么做才能發(fā)布網(wǎng)站網(wǎng)站域名購(gòu)買
  • 淘客網(wǎng)站是怎么做的中國(guó)seo關(guān)鍵詞優(yōu)化工具
  • 濟(jì)南做網(wǎng)站的公司電腦全自動(dòng)掛機(jī)賺錢
  • 公務(wù)員建設(shè)文化與道德網(wǎng)站營(yíng)銷網(wǎng)站優(yōu)化推廣
  • 廣西網(wǎng)站建設(shè)蘇州網(wǎng)站制作
  • 做傳銷網(wǎng)站違法嗎品牌推廣策略分析
  • 做自己的網(wǎng)站可以賺錢嗎市場(chǎng)推廣方案怎么寫
  • 織夢(mèng)做的網(wǎng)站 xampp百度seo排名主要看啥
  • 做外貿(mào)開通哪個(gè)網(wǎng)站好seo優(yōu)化排名易下拉用法
  • 淘寶客做軟件網(wǎng)站app廣州百度競(jìng)價(jià)托管
  • 做網(wǎng)站需要自備服務(wù)器嗎市場(chǎng)營(yíng)銷培訓(xùn)
  • 北京網(wǎng)站建設(shè) 優(yōu)化seo優(yōu)化專員
  • 做中醫(yī)藥網(wǎng)站有前景嗎山東企業(yè)網(wǎng)站建設(shè)
  • 網(wǎng)絡(luò)信息安全網(wǎng)站開發(fā)教程網(wǎng)站權(quán)重查詢接口
  • 網(wǎng)站建設(shè)win2012百度如何發(fā)布信息推廣
  • 用訂制音樂網(wǎng)站做的音樂算原創(chuàng)嗎人工智能培訓(xùn)班收費(fèi)標(biāo)準(zhǔn)
  • 網(wǎng)站建設(shè)規(guī)模與類別蘇州百度推廣排名優(yōu)化
  • b2b網(wǎng)站的功能上??焖賰?yōu)化排名
  • 做分類網(wǎng)站用什么cms谷歌網(wǎng)頁版登錄入口
  • 云南網(wǎng)站優(yōu)化建站seo優(yōu)化點(diǎn)擊軟件
  • 四川航霖管理咨詢有限公司seo站長(zhǎng)常用工具
  • 招聘網(wǎng)站的SEO怎么做網(wǎng)站推廣軟件費(fèi)用是多少
  • 做網(wǎng)站靠教育賺錢網(wǎng)絡(luò)營(yíng)銷和傳統(tǒng)營(yíng)銷的關(guān)系
  • 泰州營(yíng)銷型網(wǎng)站2345瀏覽器主頁網(wǎng)址
  • 男女做床上網(wǎng)站微信朋友圈廣告投放代理