您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java设计模式——原型(Prototype)模式

小志的博客 发布时间:2020-06-08 16:39:57 ,浏览量:0

目录
    • 一、原型模式的定义与类型
    • 二、原型模式的适用场景
    • 三、原型模式的优点
    • 四、原型模式的缺点
    • 五、原型模式简单示例
    • 六、浅拷贝简单示例
    • 七、深拷贝简单示例

一、原型模式的定义与类型

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            
关注
打赏
1661269038
查看更多评论
0.0448s