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

百度博客网站模板下载index 石家庄网站建设

百度博客网站模板下载,index 石家庄网站建设,企业服务咨询,温州哪里做网站设计1.原型模式定义 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象; 1.1 原型模式优缺点 优点 当创建一个新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有的实例…

1.原型模式定义

        用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象;

1.1 原型模式优缺点

优点

  • 当创建一个新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有的实例可以提高新实例的创建效率;
  • 相较比工程模式,原型模式提供了简化的创建结构,无需专门的工厂类来创建产品;
  • 可以使用深克隆的方式保存对象状态,辅助实现撤销操作;

缺点

  • 需要为每个类配备一个克隆方法,而且这个克隆方法位于一个类的内部,对已有的类改造时需要修改源代码,违反了开闭原则;

1.2 原型模式适用场景

        创建对象的成本比较大,比如对象中的数据是经过复杂计算或者需要从数据库得到,这种情况就可以使用原型模式,从其他已有的对象中进行拷贝,而不是每次都创建新的对象;

  • 资源优化场景,如当进行对象初始化需要很多外部资源,IO资源、数据文件、CPU、网络、内存等;
  • 复杂的依赖场景,如A对象的创建依赖B,B依赖C,C依赖D。。。
  • 性能和安全要求的场景,如同一个用户在一个会话周期里,可能会反复登录平台或使用某些受限的功能,每一次访问请求都会访问授权服务器进行授权,但如果每次都通过 new 产生一个对象会非常烦琐,这时则可以使用原型模式;
  • 同一个对象可能被多个修改者使用的场景;
  • 需要保存原始状态的场景,如记录历史操作的场景;

2.原型模式原理

        原型模式核心就是通过克隆复制一个对象;

  • 抽象原型类(Prototype):声明克隆方法的接口类,是所有具体原型类的公共父类,它可以是抽象类也可以是接口;
  • 具体原型类(ConcretePrototype):实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象;
  • 客户类(Client):在客户类中使一个原型对象克隆自身从而创建一个新的对象,由于客户类针对抽象原型类编程,因此用户可以根据需要选择具体原型类,系统具有较好的扩展性,增加或者替换原型类都比较方便; 

 

2.1 深克隆与浅克隆

  • 深克隆:完全创建一个新对象,且新对象的变量同原型一致,二者互不影响;
  • 浅克隆:新对象的变量同原型一致,且新对象的引用仍然指向原型对象,二者共享同一对象;

        Java 中的 Object 类的 clone() 方法就是浅克隆;如下面常用的BeanUtils用到了浅克隆;

BeanUtils.cloneBean(Object obj);

         对象序列化之后再进行反序列化获取到的就是不同对象,这就是深克隆;

SerializationUtils.clone(T object);

3.原型模式实现

【实例】

        如一个广告邮件的发送,大部分信息都是用的模板是相同的,只有收件人等不同,如果每发送一个邮件就创建一个邮件对象比较浪费,这就可以用到原型模式;

【代码】

        首先实体类中重写clone()方法

@Data
public class Mail implements Cloneable{//收件人private String receiver;//邮件名称private String subject;//称谓private String appellation;//邮件内容private String context;//构造函数public Mail(AdvTemplate advTemplate) {this.context = advTemplate.getAdvContext();this.subject = advTemplate.getAdvSubject();}@Overridepublic Mail clone(){Mail mail = null;try {mail = (Mail)super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return mail;}
}

        然后即可克隆该对象

//模拟邮件发送
int i = 0;//把模板定义出来,数据是从数据库获取的
Mail mail = new Mail(new AdvTemplate());
mail.setTail("xxx银行版权所有");
while(i < MAX_COUNT){//下面是每封邮件不同的地方Mail cloneMail = mail.clone();cloneMail.setAppellation(" 先生 (女士)");Random random = new Random();int num = random.nextInt(9999999);cloneMail.setReceiver(num+"@"+"liuliuqiu.com");//发送 邮件sendMail(cloneMail);i++;
}
http://www.yayakq.cn/news/350315/

相关文章:

  • wps网站超链接怎么做莆田建设网站建站
  • 做网站推广的公司发展前景无线网络优化
  • 网站开发 动易要学做游戏上什么网站学好
  • 如何做网站卖画浙江华企做的网站效果如何
  • 西安网站群建设北京建站设计
  • 响应式网站工具互联网c2c交易类网站详细策划书
  • 做微信网站青岛微网站开发
  • 洪山网站建设公司网销是什么意思
  • 硬笔书法网站是谁做的公司网站建设推荐
  • 七星网络网站网站建设 深圳
  • 网站开发有哪些公司网络推广优化工具有哪些
  • 国内h5网站欣赏傻瓜式建站软件下载
  • 如何做垂直门户网站.电子商务网站规划
  • 网站简历wordpress导入链接生成文章
  • 做网站放什么乐陵天气预报
  • 网站格式图片网站开发技术有什么
  • 数字营销平台windows优化大师使用方法
  • 企业网站建设 cms广州设计网页
  • 东莞拓步网站建设公司有必要建设网站吗
  • 网站开发任务网站建设专有名词
  • 网站关于我们怎么做单页面贵州城乡住房建设厅网站
  • 建站模板大全网站备案要邮寄资料吗
  • 烟台网站制作人才招聘免费网站制作范例
  • 夏天做哪个网站能致富贵州省住房和城乡建设厅网
  • 2_网站建设的一般步骤包含哪些?flash静态网站
  • 衡水网站建设多少钱生产企业做网站的费用怎么做账
  • 陆丰网站建设成都园林景观设计公司推荐
  • 网站开发转行进入衍生领域企业建设网站的作用
  • 凡科网做网站要钱吗上海免费网站建设品牌
  • 360网站卫士代备案流程商标logo创意免费一键生成