备忘录模式

备忘录模式详解及应用案例

备忘录模式又叫快照模式或者Token模式 是对象的行为模式

备忘录模式是备忘录对象保存了发起者对象,在发起者对象变化之后,可以恢复变化之前的状态。

1,备忘录模式的角色:

发起者角色:负责创建备忘录角色,且将当前的对象保存在备忘录对象中去。。

备忘录角色:保存发起者角色的状态。

负责人角色:保存备忘录对象。不负责备忘录角色的内容。

2,模式实例

 现在以我们在读书的时候,老是经常用黑板写字。经常想恢复已经被擦掉的文字。以现在以老是想恢复黑板上已经被擦掉的文字。这样一个场景。很适合使用备忘录模式。

首先对角色进行划分。

老师是发起人角色,粉笔是备忘录角色。黑板是是负责人角色。负责保存备忘录对象。

如下:

//老师是发起人角色。首先要创建备忘录对象

public interface Teacher{

   //老是具有写的功能

   public void write();

  //创建备忘录模式

   public Chalk createMemo();

  //恢复已经擦除的内容

   public void restoreContent(Chalk chalk);

   //设置黑板内容

   public void setContent(String content);

}

 

//老师的具体实现类 

public class TeacherImpl implements Teacher{

   //需要备份的内容

    private String content;

    //构造子

    public TeacherImpl(String content){

          this.content=content;

    }

 

   //黑板上显示的内容

   public void write(){

         System.out.println("当前要在黑板上显示的内容:"+content)

   }

 

   //创建备份内容 

  public Chalk createMemo(){

           //创建备份

           return  new Chalk(content);

   }

 

   //恢复内容

   public void restoreContent(){

       this.content=chalk.getContent;

  }

 

  //重新设置黑板的内容

  public void setContent(String content){

        this.content=content;

  }

}

 

 //备忘录对象 粉笔。负责备忘的内容和状态。

public class Chalk{

   

  //内容 需要恢复的内容

   private String content;

  

   //构造子

   public chalk(String content);

    

   //设置内容

   public void setContent(String content){

      this.content=content;

  }

   

  //得到内容

   public void getContent(){

     return content; 

   } 

 

 }

 

//提供的黑板接口专门保存备份角色。

public interface Blockboard{

      //保存备份角色

      public void saveMemo(Chalk chalk)

   

     //得备份角色

    public Chalk getMemo();

}

 

 //负责人角色的具体实现类

public class BlockBoardImpl implements Blockboard{

    //备份内容

     private Chalk chalk;  

     //保存备份角色

      public void saveMemo(Chalk chalk){

          this.chalk = chalk;

     }

   

    //得到备份内容

    public Chalk getMemo(){

       return chalk;

   }

}

 

//客户端调用

public class Client{

    public static void  main(String args[]){

    

    Teacher teacher = new TeacherImpl("这道世界难题的结果是5");

    //创建备份对象

    Chalk   chalk=teacher.createMemo();

     //管理和保存备份对象。

    Blockboard block = new BlockboardImpl();

    block.saveMemo(chalk);

    techer.write();

   

    //改变黑板内容

    teacher.setContent("这个世界的没有什么难题!");

    teacher.write();

   

    //恢复黑板的中内容

    teacher.restoreContent();

    teacher.write();

  }

}

 

打印的结果:

这道世界难题的结果是5;

这个世界的没有什么难题!

这道世界难题的结果是5;

3:应用场景:

 A,

4:优点和缺点:

优点:

A、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,
   使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。
B、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需
   要的这些状态的版本。
缺点:

A、 如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很昂贵。
B、当负责人角色将一个备忘录 存储起来的时候,负责人可能并不知道这个状态会占用多大的存储空间,从而无法
   提醒用户一个操作是否很昂贵

备忘录模式的核心:维护一个备忘录角色来保存要恢复的数据。

基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模与控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开研究,重点进行了系统建模与控制策略的设计与仿真验证。通过引入螺旋桨倾斜机构,该无人机能够实现全向力矢量控制,从而具备更强的姿态调节能力和六自由度全驱动特性,克服传统四旋翼欠驱动限制。研究内容涵盖动力学建模、控制系统设计(如PID、MPC等)、Matlab/Simulink环境下的仿真验证,并可能涉及轨迹跟踪、抗干扰能力及稳定性分析,旨在提升无人机在复杂环境下的机动性与控制精度。; 适合人群:具备一定控制理论基础和Matlab/Simulink仿真能力的研究生、科研人员及从事无人机系统开发的工程师,尤其适合研究先进无人机控制算法的技术人员。; 使用场景及目标:①深入理解全驱动四旋翼无人机的动力学建模方法;②掌握基于Matlab/Simulink的无人机控制系统设计与仿真流程;③复现硕士论文级别的研究成果,为科研项目或学术论文提供技术支持与参考。; 阅读建议:建议结合提供的Matlab代码与Simulink模型进行实践操作,重点关注建模推导过程与控制器参数调优,同时可扩展研究不同控制算法的性能对比,以深化对全驱动系统控制机制的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值