当前位置: 首页 > news >正文

折扣网站模板大众网站平安建设之星

折扣网站模板,大众网站平安建设之星,二手东西网站怎么做,电子商务网站的全面建设设计模式—创建型模式之原型模式 原型模式#xff08;Prototype Pattern#xff09;用于创建重复的对象#xff0c;同时又能保证性能。 本体给外部提供一个克隆体进行使用。 比如我们做一个SjdwzMybatis#xff0c;用来操作数据库#xff0c;从数据库里面查出很多记录Prototype Pattern用于创建重复的对象同时又能保证性能。 本体给外部提供一个克隆体进行使用。 比如我们做一个SjdwzMybatis用来操作数据库从数据库里面查出很多记录其中很多记录改变很少。每次查数据库把所有数据都封装一个对象然后返回。假设有很多线程来查如下记录 Student student new Student(张三,男)如果每次都创建对象封装并返回这样系统就会有很多student这样就会浪费内存。 Student类如下 public class Student {private String name;private Integer age;public Student() {System.out.println(创建了Student对象);}//省略getter() 、 setter() toString() } SjdwzMybatis如下 public class SjdwzMybatis {/*** 通过name获取Student*/public Student queryStudent(String name){return queryStudentFromDB(name);}/*** 演示从数据库查Student*/private Student queryStudentFromDB(String name) {//简单演示查询到了System.out.println(从数据库查询到了:name);Student student new Student();student.setName(name);student.setAge(16);return student;} }测试类 public class ProtoTypeTest {public static void main(String[] args) {SjdwzMybatis sjdwzMybatis new SjdwzMybatis();Student stu1 sjdwzMybatis.queryStudent(zhangsan);Student stu2 sjdwzMybatis.queryStudent(zhangsan);Student stu3 sjdwzMybatis.queryStudent(zhangsan);Student stu4 sjdwzMybatis.queryStudent(zhangsan);} }这样会有大量具有相同属性的student被外部创建同时查库次数过多。 我们是否能设计一个缓存来保存查过的内容再查相同的记录时可以很快拿到原来的原型对象呢 那我们的SjdwzMybatis便变成了如下代码 public class SjdwzMybatis {//缓存private MapString,Student stuCache new HashMap();/*** 通过name获取Student*/public Student queryStudent(String name){if(stuCache.containsKey(name)){return stuCache.get(name);}else{return queryStudentFromDB(name);}}/*** 演示从数据库查Student*/private Student queryStudentFromDB(String name) {//简单演示查询到了System.out.println(从数据库查询到了:name);Student student new Student();student.setName(name);student.setAge(16);//存入内存stuCache.put(name,student);return student;} }但是这是否会有问题呢 如果我们把stu1的属性改了那么stu2、stu3、stu4的属性也会被改变这会影响到我们缓存里的数据造成脏缓存数据同时我们查出来的内容并没有提交修改不能就把原数据给修改掉。 原型模式 我们把Student修改成如下代码这便是原型模式 //实现Cloneable接口这只是一个标记还需要重写clone()方法 public class Student implements Cloneable{private String name;private Integer age;//重写clone方法Overrideprotected Object clone() throws CloneNotSupportedException {Student student new Student();student.setName(this.name);student.setAge(this.age);return student;} }然后SjdwzMybatis修改为如下代码 public class SjdwzMybatis {//缓存private MapString,Student stuCache new HashMap();/*** 通过name获取Student*/public Student queryStudent(String name) throws CloneNotSupportedException {if(stuCache.containsKey(name)){return (Student) stuCache.get(name).clone();}else{return queryStudentFromDB(name);}}/*** 演示从数据库查Student*/private Student queryStudentFromDB(String name) throws CloneNotSupportedException {//简单演示查询到了System.out.println(从数据库查询到了:name);Student student new Student();student.setName(name);student.setAge(16);//存入内存stuCache.put(name,(Student) student.clone());return student;} }从数据库查出来放入缓存的对象与从缓存取出来的都是clone出来的。 可以看到我们对stu1修改并不会影响其他的数据了。
http://www.hkea.cn/news/14569300/

相关文章:

  • 怎么做能上谷歌网站郑州个人网站建设
  • 河南省和城乡建设厅网站首页wordpress缓存设置
  • 创新的中小型网站建设计算机网站设计怎么做
  • 浦东网站建设价格现在去长沙会被隔离吗
  • 做数据ppt模板下载网站买源码做网站
  • 网站源码资源网站运维工作内容
  • 360报危险网站网站开发和网络开发区别
  • 做跨境网站注意事项大气网络公司名字
  • 川畅咨询 做网站多少钱网站对接qq群 虚拟主机
  • 网站制作什么深圳社保
  • hishop网站搬家网站策划与建设实训心得
  • 湘潭seo网站优化网页界面设计以什么为载体
  • 什么是网站设计网络设计案例题
  • 贵阳论坛网站建设冠县网站建设多少钱
  • 美食网站设计方案嘉兴网站建设兼职
  • 做问卷的网站生成二维码滁州seo网站推广方案
  • 建站程序员招聘模板软件app
  • 视频直播网站开发 设计应聘软件开发工程师简历
  • 建设网站实训百度热搜高考大数据
  • 郑州大学科技园手机网站建设网站后台管理生成器
  • 怎么把网站列入黑名单平面设计接单兼职
  • 门户网站是什么o2o网站建设特色
  • 郑州专门做网站的公司有哪些wordpress添加商品分类页
  • 中小企业如何建设网站怎么建设个网站
  • 做的网站没法用能否拒绝付工资免费门户网站开发
  • 中国著名摄影网站深圳网站建设的公司
  • 怎么做网站推广佳木斯国外自助建站
  • 网站建设要咨询哪些内容下载企业微信app免费
  • 威特视频网站建设方案司法行政网站建设目的
  • 设计师网上接单的网站视频推广方案