备忘录模式相关知识
-
行为型模式:备忘录模式十一大行为型模式之九:备忘录模式。 简介 姓名 :备忘录模式 英文名 :Memento Pattern 价值观 :凡事要有备份 个人介绍 : Without violating encapsulation,capture and externalize an object's internal state so that the object can be restored to this state later. 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 (来自《设计模式之禅》) 你要的故事 点开看这篇文章
-
Java设计模式学习记录-备忘录模式 前言这次要介绍的是备忘录模式,也是行为模式的一种 。现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了。那么备忘录模式又是什么样子的呢?是不是和手机上的备忘录一样呢?下面来介绍一下。备忘录模式 概念介绍备忘录模式是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。简单的来说就是平时玩的通关游戏,第一次前进了5步,第二次前进时踩到便便了,然后要回到之前的进度。例如下图结构: 举例我们还是用一个小例子来简单介绍一下备忘录模式,在玩一个步骤游戏时,每走一步时步数都加一,遇到道具可以快速走几步,或者减几步。用备忘录模式的思想来实现这个逻辑,就是如下代码。游戏类/** * 游戏 */@Datapublic class Game { /** &n
-
PHP设计模式(十八)—备忘录模式(Memento Pattern)备忘录模式 (Memento Pattern): 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。又叫做快照模式(Snapshot Pattern)或Token模式 (一)为什么需要备忘录模式 1,有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 2,本模式简化了发起人类。发起人不再需要
-
【设计模式】备忘录模式备忘录模式(Memonto Pattern) 在不被破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 优点:实现新的封装和提供了状态恢复的实现机制 缺点:资源消耗过大 模式结构: 1.Originator(原发器) 保存内部状态的类称为原发器。原发器可以创建一个备忘录,并存储它的当前状态,也可以使用备忘录来恢复其内部状态。 2.Memonto(备忘录) 备忘录对象不能直接被其他类使用,根据原发器来决定保存哪些内部状态。 3.Caretaker(负责
备忘录模式相关课程
备忘录模式相关教程
- 5.卸载设备目录 使用 mount 可以挂载一个设备目录,而使用 unmount 可以将其卸载,命令如下:unmount /media/soft执行结果如下:Tips:unmount 命令除了可以卸载某个目录,也可以跟上设备名称来卸载。
- 2. Warren 集群模式与 Shovel 集群模式概述 Warren 集群模式:Warren 集群模式,其中文含义为主备集群模式。那么什么是主备呢?我们先来看一下主备的基础概念,主备这一名词的诞生并不是在我们所熟知的计算机领域,而是首先出现在我们的日常生活中,对一个具体问题提供了一个或多个解决方案。对于要解决的一个具体问题而言,主备名词中的主,表示解决这一问题的首选方案,也可以理解为主要方案,即我要解决这个问题,我应该首先就使用这一首选方案;而主备名词中的备,则表示解决这一问题的备选方案,也可以理解为辅助方案,即当这一问题无法使用首选方案来解决时所采取的一种或多种辅助方案。随着我们计算机领域不断地发展,以及逐渐增长的项目复杂度,主备这一名词逐渐渗透到我们的计算机领域中。在计算机领域中,主备往往表示的仅是集群的一种实现方式,或者架构模式,并不是 RabbitMQ 所特有的专业名词, 那么主备模式在 RabbitMQ 中到底是什么含义呢?主备模式,在 RabbitMQ 中被称为 Warren 模式,即当我们需要部署 RabbitMQ 集群时,我们需要指定一个主 RabbitMQ Server 节点,然后指定两个或两个以上的从 RabbitMQ Server 节点,并且在主节点和从节点之间,通过一定的技术手段来实现主从节点间的通信,这一过程就是 RabbitMQ 中的 Warren 主备模式,其主备模式架构如下图所示:从上图中我们可以看到,当消费者来消费 RabbitMQ 中的消息时,由于我们设置了主备集群模式,所以消费者会首先从主节点中获取消息并消费,如果主节点由于其他原因而挂掉了,或者主节点的服务器本身宕机了,那么消费者会继续从 RabbitMQ 从节点-1,RabbitMQ 从节点-2 去获取消息并消费,以此类推。这就实现了一种,当主节点由于种种原因不能正常提供服务时,从节点还能继续提供服务的场景。Tips: 1. 主备模式中所有的 RabbitMQ Server 节点均分布在不同的服务器上,但是所有节点间的数据存储却是共享的,这也就是为什么从节点还能继续提供服务的原因; 2. 主备模式是 RabbitMQ 官方提供的最基础的一种集群模式,但是确不是实际项目中经常使用的一种集群模式,同学们只需要对主备模式的概念有一个了解即可。Shovel 集群模式:Shovel 模式,其中文含义为远程模式,是 RabbitMQ 官方提供的第二种集群实现模式。Shovel 远程模式的概念类似于上述的 Warren 主备模式,只不过他们的集群策略是不同的。Shovel 远程模式的实现,也是需要部署多个 RabbitMQ Server 节点,并且在不同的 RabbitMQ Server 节点中建立节点间的通信机制,以达到使用多个 RabbitMQ Server 节点的目的。而无论是 Shovel 远程模式,还是 Warren 主备模式,都需要消费者通过远程的方式来调用相应的节点,来获取并消费消息,只不过 Shovel 模式在远程调用时多添加了一种集群策略。Shovel 远程模式节点的部署不同于 Warren 主备模式,在部署 Shovel 远程模式时,通常需要我们根据地域环境来抉择所需要部署的节点所在位置,并考虑多个远程模式节点之间的通信成本,成本越小当然也就是最好的了,而 Warren 主备模式则不需要考虑地域这一因素,Shovel 远程模式的架构如下图所示:从上图中我们可以看到,我们根据不同的地里位置,分别声明了三个节点,分别是北京节点、唐山节点,以及保定节点,这三个区域的地里位置挨得很近,很适合部署 Shovel 远程集群模式。在我们的生产者将消息推送到 RabbitMQ Server 节点,也就是上图中的北京节点时,如果位于北京节点的 RabbitMQ Server 服务器的压力正常,则消息会被推送到 RabbitMQ 北京节点;如果 RabbitMQ 北京节点的服务器压力过大,或该节点中的 RabbitMQ 消息队列已满,则消息会被推送到与之相连的唐山节点,以此类推,直到保定节点。在 RabbitMQ 中,上图中的 RabbitMQ 北京节点被称为远程主节点,而 RabbitMQ 唐山节点和 RabbitMQ 保定节点则被称为远程备用节点,这一点和主备模式的概念相似。Tips: 1. 远程模式虽然提供了对不同节点的 RabbitMQ Server 压力检测的功能,但是其配置起来过于繁琐,所以在实际工作中使用的也不是很多; 2. 配置 Shovel 模式一定要考虑节点间不同的位置,如果节点之间的距离太远,则会造成节点间通信的延迟,这点同学们注意。
- 4.手动挂载媒体设备 下面以挂载某一个设备的目录 /new/test 到 /media/soft 下为例,命令如下:mount -ft vfat /new/test /media/soft执行结果如下图:Tips:使用上述命令,没有任何提示信息,因为这里使用的的 -f 参数是模拟挂载,实际业务中可参照此方法去挂载新设备目录。
- 2. 应用备用资源 不同类型的 Android 设备可能需要不同类型的资源。例如,如果设备屏幕比标准屏幕大,则应提供不同的布局资源,从而充分利用额外的屏幕空间;如果设备的语言设置不同,则应提供不同的字符串资源,以便将界面中的文本转换为其他语言。在运行时,Android 会检测当前设备配置并为应用加载合适的资源。我们如何为一组资源指定配置特定的备用资源呢?分两步:在 res/ 中创建以 < resources_name >-< config_qualifier > 形式命名的新目录;< resources_name > 是相应默认资源的目录名称;< config_qualifier > 是指定要使用这些资源的各个配置限定符的名称。将相应的备用资源保存在此新目录下,这些资源文件必须与默认资源文件完全同名。例如,以下是一些默认资源和屏幕像素密度备用资源:res/ drawable/ icon.png background.png drawable-hdpi/ icon.png background.pnghdpi 限定符表示该目录中的资源适用于屏幕密度较高的设备。其中,每个可绘制对象目录中的图像均已针对特定的屏幕密度调整了大小,但文件名完全相同。如此一来,用于引用 icon.png 或 background.png 图像的资源 ID 始终相同,但 Android 会通过将设备配置信息与资源目录名称中的限定符进行比较,选择最符合当前设备的各个资源版本。Android 支持若干配置限定符,我们可以通过使用短划线分隔每个限定符,从而向一个目录名称添加多个限定符。下表按优先级顺序列出了有效的配置限定符;如果对资源目录使用多个限定符,则必须按照表中所列顺序将其添加到目录名称中。配置描述MCC 和 MNC移动设备国家代码 (MCC),(可选)后跟设备 SIM 卡中的移动设备网络代码 (MNC)。语言和区域语言通过由两个字母组成的 ISO 639-1 语言代码进行定义,可以选择后跟两个字母组成的 ISO 3166-1-alpha-2 区域码(前缀用小写字母 r)。布局方向应用的布局方向。ldrtl 是指“布局方向从右到左”。smallestWidth屏幕的基本尺寸,由可用屏幕区域的最小尺寸指定。可用宽度指定资源应使用的最小可用屏幕宽度。可用高度指定资源应使用的最小可用屏幕高度。屏幕尺寸屏幕是小尺寸、标准尺寸还是大尺寸。屏幕纵横比屏幕是否为宽屏。圆形屏幕屏幕是否为圆形屏幕。广色域屏幕是否具有广色域。高动态范围屏幕是否具有 HDR 功能。屏幕方向当前的设备方向。类似 port,land。夜间模式是否夜间模式。屏幕像素密度屏幕分辨率与屏幕尺寸的比值。类似 ldpi,mdpi,hdpi,xhdpi 等。平台版本(API 级别)设备支持的 API 级别。
- 2. 阻塞式与非阻塞式模型 我们以 Linux 系统为例,介绍阻塞式与非阻塞式的概念。Linux 程序的执行模式分为用户态和内核态,应用程序逻辑运行在用户态,访问系统资源的逻辑运行在内核态。其实现代操作系统都是这种模式。当程序的执行逻辑从用户态切换到内核态时,会引发上下文的切换,会涉及到数据从用户态到内核态,或者是从内核态到用户态拷贝的问题。这时,系统 API 会提供阻塞式和非阻塞式两种调用方式。比如,我们调用 recv 函数接收 Socket 数据,recv 函数可以选择阻塞式或者是非阻塞式调用模式,不同的模式,编程风格是完全不同。假如 Socket 的接收缓冲区没有准备好要接收的数据,如果选择阻塞式调用,那么应用线程会被阻塞在 recv 调用上,不能继续执行,线程会处于等待状态,直到系统准备好数据;如果选择非阻塞式调用,那么应用线程不会被阻塞,recv 函数会立即返回。当系统准备好数据以后,会触发一个读事件,这就要求我们必须通过某种机制监听读事件,一般都是通过 I/O 多路复用机制来解决。我们通过两张图来感受一下阻塞式和非阻塞式的差异。阻塞式:非阻塞式:从以上两张图可以看出,如果 read 函数采用阻塞式调用 ,当内核没有准备好的数据时,应用线程会被阻塞到 read 调用上,进入等待状态,直到有数据可以读取才返回。如果 read 函数采用非阻塞式调用,当内核没有准备好数据时,read 函数会返回 EAGAIN,线程不会被阻塞。当系统准备好数据以后,会触发一个读事件。对于逻辑比较简单的场景,比如逻辑简单的客户端程序,可以采用阻塞式编程模型,这样实现简单,容易理解。对于逻辑比较复杂的场景,比如高性能服务器,必须采用非阻塞式编程模型,而且要配合 I/O 多路复用机制。下来我们就介绍一下如何进行非阻塞式 Socket 编程。
- 2.2 主题模式基础概念回顾 定义:主题模式,也被称为通配符模式,官网一般称为主题模式,即交换机与消息队列所绑定的 key 值可以像匹配通配符的方式,来匹配消息队列,到底什么意思呢,我们往下看。描述:主题模式对 routing key 的匹配规则做了改进,上述其他四种模式中有涉及 key 匹配的地方都是完全匹配,即名称必须相等时才能把 key 匹配上,而对于主题模式,则不需要这样。主题模式将 key 值中的每个单词或者关键词,使用英文状态下的 . 符号进行间隔,如上图所示。我们这里只是对直接消息发送模式,和主题消息发送模式的基础概念进行了一个简单的回顾,如果有同学忘了这些基础概念,可以回过头去 《RabbitMQ 消息发送模式详解》 这一小节复习。
备忘录模式相关搜索
-
back
backbone
background
background attachment
background color
background image
background position
background repeat
backgroundcolor
backgroundimage
background属性
badge
bash
basics
basis
bat
bdo
bean
before
begintransaction