目录
一、原型模式的定义与类型
- 一、原型模式的定义与类型
- 二、原型模式的适用场景
- 三、原型模式的优点
- 四、原型模式的缺点
- 五、原型模式简单示例
- 六、浅拷贝简单示例
- 七、深拷贝简单示例
1. 定义
- 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
- 不需要知道任何创建的细节,不调用构造函数
3. 类型
- 创建型
- 类初始化消耗较多资源
- new产生的一个对象需要非常频繁的过程(数据准备、访问权限等)
- 构造函数比较复杂
- 循环体中产生大量对象时
- 原型模式性能比直接new一个对象性能高
- 简化创建过程
- 必须配备克隆方法
- 对克隆复杂对象或对克隆出的对象进行复杂改造时,容易引入风险
- 深拷贝、浅拷贝要运用得当
1、定义Mail类实现Cloneable接口,并重写clone方法。
package com.rf.designPatterns.prototype;
/**
* @description: 将目标类Mail实现Cloneable接口,并重写clone方法
* @author: xiaozhi
* @create: 2020-06-08 09:31
*/
public class Mail implements Cloneable{
private String name;
private String emailAddress;
private String Context;
//构造方法
public Mail(){
System.out.println("调用了 Mail Class的构造方法。");
}
//setter、getter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public String getContext() {
return Context;
}
public void setContext(String context) {
Context = context;
}
//重写toString方法
@Override
public String toString() {
return "Mail{" +
"name='" + name + '\'' +
", emailAddress='" + emailAddress + '\'' +
", Context='" + Context + '\'' +
'}'+super.toString();
}
//重写clone方法
@Override
protected Object clone() throws CloneNotSupportedException {
System.out.println(" clone mail object");
return super.clone();
}
}
2、定义一个测试类
package com.rf.designPatterns.prototype;
/**
* @description:
* @author: xiaozhi
* @create: 2020-06-08 09:44
*/
public class MailTest {
public static void main(String[] args) throws CloneNotSupportedException {
//new一个实例,并给context属性赋值
Mail mail=new Mail();
mail.setContext("初始化模板");
System.out.println("初始化的mail=====:"+mail);
for(int i=0;i
关注
打赏
热门博文
- Netty——网络编程 NIO(Selector处理accept事件)代码示例
- CompletableFuture异步编排(多任务组合)
- CompletableFuture异步编排(线程串行化代码示例)
- CompletableFuture异步编排(handle最终处理)
- CompletableFuture异步编排(计算完成回调代码示例)
- hutool工具导出excel代码示例
- java 获取音频、视频文件时长代码示例
- PostMan发送请求参数带有路径特殊字符会返回400错误(与URL字符及URL编码值有关)
- Rabbitmq与Erlang安装包下载图解
- idea2021.1版本SpringBoot项目日志的说明及使用