备忘录模式

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
 * 设计模式之备忘录模式
 *备忘录模式的优点有:
 *当发起人角色中的状态改变时,有可能这是个错误的改变,我们使用备忘录模式就可以把这个错误的改变还原。
 *备份的状态是保存在发起人角色之外的,这样,发起人角色就不需要对各个备份的状态进行管理。
 *
 *备忘录模式的缺点:
 *在实际应用中,备忘录模式都是多状态和多备份的,发起人角色的状态需要存储到备忘录对象中,对资源的消耗是比较严重的。
 *
 *适用场景
 *如果有需要提供回滚操作的需求,使用备忘录模式非常适合,比如jdbc的事务操作,文本编辑器的Ctrl+Z恢复等。
 */
 class Originator {
 private String state1 = "";
 private String state2 = "";
 private String state3 = "";
 private String[] state4=null;
 
 public String getState1() {
  return state1;
 }
 public void setState1(String state1) {
  this.state1 = state1;
 }
 public String getState2() {
  return state2;
 }
 public void setState2(String state2) {
  this.state2 = state2;
 }
 public String getState3() {
  return state3;
 }
 public void setState3(String state3) {
  this.state3 = state3;
 }
 
 public String[] getState4() {
  return state4;
 }
 public void setState4(String[] state4) {
  this.state4 = state4;
 }
 public Memento createMemento(){
  return new Memento(BeanUtils.backupProp(this));
 }
 
 public void restoreMemento(Memento memento){
  BeanUtils.restoreProp(this, memento.getStateMap());
 }
 public String toString(){
  return "state1="+state1+"state2="+state2+"state3="+state3+"state4="+state4.length;
 }
}
class Memento {
 private Map<String, Object> stateMap;
 
 public Memento(Map<String, Object> map){
  this.stateMap = map;
 }

 public Map<String, Object> getStateMap() {
  return stateMap;
 }

 public void setStateMap(Map<String, Object> stateMap) {
  this.stateMap = stateMap;
 }
}
class BeanUtils {
 public static Map<String, Object> backupProp(Object bean){
  Map<String, Object> result = new HashMap<String, Object>();
  try{
   BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
   PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
   for(PropertyDescriptor des: descriptors){
    String fieldName = des.getName();//
    Method getter = des.getReadMethod();
    Object fieldValue = getter.invoke(bean, new Object[]{});
    if(!fieldName.equalsIgnoreCase("class")){
     result.put(fieldName, fieldValue);
    }
   }
   
  }catch(Exception e){
   e.printStackTrace();
  }
  return result;
 }
 
 public static void restoreProp(Object bean, Map<String, Object> propMap){
  try {
   BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
   PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
   for(PropertyDescriptor des: descriptors){
    String fieldName = des.getName();
    if(propMap.containsKey(fieldName)){
     Method setter = des.getWriteMethod();
     setter.invoke(bean, new Object[]{propMap.get(fieldName)});
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
class Caretaker {
 private Map<String, Memento> memMap = new HashMap<String, Memento>();
 public Memento getMemento(String index){
  return memMap.get(index);
 }
 
 public void setMemento(String index, Memento memento){
  this.memMap.put(index, memento);
 }
}
public class Client {
 public static void main(String[] args){
  Originator ori = new Originator();//发起者
  String[] str = {"飞机"};
  ori.setState1("J10");
  ori.setState2("J11");
  ori.setState3("J20");
  ori.setState4(str);
  System.out.println("===初始化状态===\n"+ori);
  
  Caretaker caretaker = new Caretaker();//临时替代者
  caretaker.setMemento("001",ori.createMemento());//设置备忘录====>备忘录模式关键
  
  String[] str2 = {"软件","职位"};
  ori.setState1("项目组长");//修改发起者属性值
  ori.setState2("项目经理");
  ori.setState3("技术总监");
  ori.setState4(str2);
  System.out.println("===修改后状态===\n"+ori);
  
  ori.restoreMemento(caretaker.getMemento("001"));//从备忘录中恢复属性值
  System.out.println("===恢复后状态===\n"+ori);
 }
}
/*注:
 *1发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。
 *2备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。
 *3管理角色:对备忘录进行管理,保存和提供备忘录。
 */

【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)内容概要:本文围绕“基于深度强化学习的微能源网能量管理与优化策略”展开研究,重点利用深度Q网络(DQN)等深度强化学习算法对微能源网中的能量调度进行建模与优化,旨在应对可再生能源出力波动、负荷变化及运行成本等问题。文中结合Python代码实现,构建了包含光伏、储能、负荷等元素的微能源网模型,通过强化学习智能体动态决策能量分配策略,实现经济性、稳定性和能效的多重优化目标,并可能与其他优化算法进行对比分析以验证有效性。研究属于电力系统与人工智能交叉领域,具有较强的工程应用背景和学术参考价值。; 适合人群:具备一定Python编程基础和机器学习基础知识,从事电力系统、能源互联网、智能优化等相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习如何将深度强化学习应用于微能源网的能量管理;②掌握DQN等算法在实际能源系统调度中的建模与实现方法;③为相关课题研究或项目开发提供代码参考和技术思路。; 阅读建议:建议读者结合提供的Python代码进行实践操作,理解环境建模、状态空间、动作空间及奖励函数的设计逻辑,同时可扩展学习其他强化学习算法在能源系统中的应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值