首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈JAVA设计模式之——原型模式(Prototype)

浅谈JAVA设计模式之——原型模式(Prototype)

作者头像
冰河
发布2020-10-29 15:39:12
2150
发布2020-10-29 15:39:12
举报
文章被收录于专栏:冰河技术冰河技术

一、概述

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

二、适用性

  • 当一个系统应该独立于它的产品创建、构成和表示时。
  • 当要实例化的类是在运行时刻指定时,例如,通过动态装载。
  • 为了避免创建一个与产品类层次平行的工厂类层次时。
  • 当一个类的实例只能有几个不同状态组合中的一种时。

建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

三、参与者

  • Prototype 声明一个克隆自身的接口。
  • ConcretePrototype 实现一个克隆自身的操作。
  • Client 让一个原型克隆自身从而创建一个新的对象。

四、类图

五、示例

  • Prototype
package com.lyz.design.prototype;
/**
 * 原型类,实现Cloneable接口
 * @author binghe
 *
 */
public class Prototype implements Cloneable {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public Object clone(){
        try {
            return super.clone();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
  • ConcretePrototype
package com.lyz.design.prototype;
/**
 * 原型类的子类,用于构建原型
 * @author binghe
 *
 */
public class ConcretePrototype extends Prototype {
    public ConcretePrototype(String name) {
        setName(name);
    }
}
  • Client
package com.lyz.design.prototype;
/**
 * 测试类
 * @author liuyazhuang
 *
 */
public class Test {
    public static void main(String[] args) {
        Prototype pro = new ConcretePrototype("prototype");
        Prototype pro2 = (Prototype)pro.clone();
        System.out.println(pro.getName());
        System.out.println(pro2.getName());
    }
}
  • result
prototype
prototype
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冰河技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、适用性
  • 三、参与者
  • 四、类图
  • 五、示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档