【设计模式学习笔记】原型模式

  • background:
    系统A启动的时候加载数据到内存,并解析到hashmap里;
    系统B分析日志,定期更新数据库中的数据,并标记为最新的数据版本;

  • 需求1
    系统A需要定期根据数据库中的数据,更新内存中的数据:
    记录当前数据的版本和更新时间,然后定期从数据库中取出新增的数据并解析到hashmap里。

  • 需求2
    系统A的所有数据在任何时间都是同一个版本的,不能多个版本的数据混合在一起。并且在更新内存数据的时候,系统A也要处于可用状态,不能停机更新:
    把正在使用的版本设为”服务版本“,当要更新时,不在服务版本上操作,而是新建一个对象从数据库中读取所有数据并解析到hashmap里。最后再将服务版本切到新的对象。

  • 针对需求2的问题
    在每次读取数据并解析的过程中,都需要从头到尾执行所有耗时操作。为了提高效率,引入了原型模式。

  • 针对需求2的问题的解决方案
    先拷贝服务版本的数据到新的版本里,然后从数据库中取出新增/修改的数据,更新到新版本里。

  • 疑问
    ”针对需求2的问题的解决方案“和”需求1“的区别是什么?
    多了一个对象的拷贝?
    1,深拷贝
    2,浅拷贝

posted @ 2022-05-17 19:05  Shengjie  阅读(18)  评论(0编辑  收藏  举报