说是客户端瘦身,其实备忘录模式的本质让调用客户端职责减轻,将客户端的对于实现比如数据恢复之类细节的内容封装在操作类之中。其实面向对象的一重要方面就是划分清楚职责,这样可以减少改到造成的影响,便于扩展。

Originator的职责是负责备忘录数据对象的生产以及回复,并保存当前版本数据对象,Originator本身是“宽接口”,可以对备忘数据进行修改和读取;
CareTaker则是负责备忘数据的存储,具有“窄接口”,可以只提供对备忘数据的读取功能。
Memento数据实体,Memento对象可以是结构,也可以实现IClone接口以实现原型模式,因为Originator在保存备忘的时候是希望能够返回一个全新的对象,而不是被关联的对象。

示例:
实现类

public class Originator
{
public Memento myMemento = null; public Memento SaveMemento()
{
return myMemento.Clone() as Memento;
} public void SetMemento(Memento pMemento)
{
this.myMemento = pMemento;
}
} public class Memento : ICloneable
{
public string Name;
public string Address;
public int Age; public object Clone()
{
return this.MemberwiseClone();
}
} public class CareTaker
{
private Memento myMemento = null; public Memento MyMemento
{
get { return myMemento; }
set { myMemento = value; }
}
}

调用客户端

class Program
{
static void Main(string[] args)
{
Memento m = new Memento();
m.Address = "Beijing";
m.Age = 23;
m.Name = "Lorry"; Originator org = new Originator();
org.SetMemento(m);
Console.WriteLine("Address:{0}; Age:{1}", org.myMemento.Address, org.myMemento.Age); CareTaker taker = new CareTaker();
taker.MyMemento = org.SaveMemento(); org.myMemento.Address = "Dalian";
org.myMemento.Age = 34;
Console.WriteLine("Address:{0}; Age:{1}", org.myMemento.Address, org.myMemento.Age); org.SetMemento(taker.MyMemento);
Console.WriteLine("Address:{0}; Age:{1}", org.myMemento.Address, org.myMemento.Age); Console.Read();
}
}

Memento:客户端瘦身的更多相关文章

  1. Redis “瘦身”指南

    code[class*="language-"], pre[class*="language-"] { background-color: #fdfdfd; - ...

  2. iOS 安装包瘦身(下篇)

    本文来自网易云社区 作者:饶梦云 2.4. 清理无用代码 2.4.1. Dead Code Stripping Activating this setting causes the -dead_str ...

  3. 39、apk瘦身(转载)

    本文转自::Android开发中文站 » 关于APK瘦身值得分享的一些经验 从APK的文件结构说起 APK在安装和更新之前都需要经过网络将其下载到手机,如果APK越大消耗的流量就会越多,特别是对于使用 ...

  4. iOS图片瘦身总结

    前言 最近在公司写了个小程序来为iOS应用中的图片瘦身,进而减小APP大小,减少用户下载时的流量. 瘦身是在一个专门为图片瘦身的网站进行的. 地址:https://tinypng.com 这个网站提供 ...

  5. Docker系列之镜像瘦身(五)

    前言 本节我们来讲讲在我们在构建镜像过程中不出问题,同时使得最后所构建的镜像文件大小尽可能最小,温馨提示:文中大图均可点击放大查看详细信息. 缓存(cache) Docker的优势之一在于提供了缓存, ...

  6. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  7. Android APK瘦身之Android Studio Lint (代码审查)

    ******** ******** 第一部分: 瘦身内容介绍 ******** ******** 项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的APK变得更肿, 因此 ...

  8. 【直播】APP全量混淆和瘦身技术揭秘

    [直播]APP全量混淆和瘦身技术揭秘 近些年来移动APP数量呈现爆炸式的增长,黑产也从原来的PC端转移到了移动端,通过逆向手段造成数据泄漏.源码被盗.APP被山寨.破解后注入病毒或广告现象让用户苦不堪 ...

  9. APK瘦身记,如何实现高达53%的压缩效果

    作者:非戈@阿里移动安全 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式,关于这个话题其实是一个老生常谈的题目,不论是公司内部,还是外部网络,前人前辈已经总结出很多方法和规律. ...

随机推荐

  1. 20169210《Linux内核原理与分析》第五周作业

    本次内容分为两部分,第一部分是实验,第二部分是教材的第四章和第六章. 第一部分:实验 本次的实验内容是构造一个简单的Linux系统MenuOS,过程如下. 首先使用如下命令进入LinuxKernel ...

  2. 格式化日期时间字符串 Get-Date -Uformat , -format

    #将字符串格式化为时间格式 $dateTimeStr = '20141231T23:59:59' $format = 'yyyyMMddTHH:mm:ss' $formatProvider = [Gl ...

  3. angularjs ngrepeat filter

    angularjs ng-repeat filter演示样例 地址

  4. json.net xml转换为json格式时,如何将指定节点转换成数组

    using System.Xml.Linq; using Newtonsoft.Json; Response.ContentType = "application/json"; X ...

  5. Performance Tuning of Spring/Hibernate Applications---reference

    http://java.dzone.com/articles/performance-tuning For most typical Spring/Hibernate enterprise appli ...

  6. python 入门1

    python的历史 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Per ...

  7. Base64原理简介

    Base64是一种编码方式,通常用于将二进制数据转换成可见字符的形式,该过程可逆. 过程大致如下: 1. 对64个可见字符,进行一个索引编码.索引是二进制的值,对应找到一个可见字符. Base64 编 ...

  8. sql 嵌套事务学习笔记

    以下内容根据此官方文档修改:http://technet.microsoft.com/zh-cn/library/ms189336(v=sql.105).aspx 嵌套事务的使用场景或者说目的主要是为 ...

  9. 一个实例明白AutoResetEvent和 ManulResetEvent的用法

    先看一段代码: public class WaitHandlerExample {                 public static AutoResetEvent waitHandler;  ...

  10. Using native GDI for text rendering in C#

    Using native GDI for text rendering in C# Aug12by Arthur To complete my previous post on text render ...