文档章节

【创建型】- 原型模式

ZeroneLove
 ZeroneLove
发布于 02/19 22:42
字数 363
阅读 7
收藏 0

原型模式:(对象克隆,每次都是新的对象,单例模式返回唯一对象)


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

角色

  • 抽象原型类:定义具有克隆自己的方法的接口
  • 具体原型类:实现克隆方法
  • 客户类:克隆生成一个新的对象

抽象原型类:AbstractPrototype

public abstract class AbstractPrototype{

	private String str;

	public AbstractPrototype(String str){
		this.str=str;
	}

	public String getStr(){
		return str;
	}

	public void show(){
		System.out.println(str);
	}

	/**
	 * 提供克隆自身的方法,实现对象的创建
	 * @return
	 */
	public abstract AbstractPrototype createPrototypeObject();
}

具体原型类:ConcretePrototype

public class ConcretePrototype extends AbstractPrototype implements Cloneable{

    public ConcretePrototype(String str) {
        super(str);
    }

    /**
        * 克隆的具体实现方法:浅度复制(只复制属性,不复制其引用的对象)
        */
    @Override
    public AbstractPrototype createPrototypeObject(){

        ConcretePrototype cp = null;
        try{
            cp =(ConcretePrototype) super.clone(); //Java RTTI机制
        }catch (Exception e) {
                e.printStackTrace();
            }
        return cp;
    }
}

测试代码:

//浅复制:只复制对象内容本身,不涉及到关联对象(元对象和拷贝对象的引用指向同一个对象)
AbstractPrototype ap = new ConcretePrototype("Hello");
ap.show();

AbstractPrototype ap1 = ap.createPrototypeObject();
ap1.show();

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 164
码字总数 133695
作品 0
深圳
高级程序员
私信 提问
设计原则和设计模式_Index

设计原则 1.1 什么是设计原则 ?(https://my.oschina.net/jimilee/blog/732569) 1.2 设计原则如何用? 1.3 设计原则详解 1.4 30分钟快速理解面向对象设计原则 2. 设计模式 2.1 什么时候使用设...

无寄语
2016/08/14
1
0
『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory

几点说明 永远不要纠结于在什么时候使用什么模式 永远不要纠结于什么模式适用于什么情景 永远不要去死记任何的模式 并不是说,23种设计模式可以应付所有的问题,要知道,使用一种方法的时候,...

灰大羊
2016/07/05
9
0
JavaScript高级程序设计02

面向对象 重点:原型 创建对象 Javascript中没有类的概念,对象是属性的集合,可以想象成成散列表。 对象实例 创建object实例,为它添加方法 对象字面量 其实就是创建object实例的简写形式 ...

白发道长
2018/01/02
0
0
【设计模式】原型模式 Pototype Parttern

前面讲了创建一个对象实例的方法单例模式Singleton Parttern, 创造多个产品的工厂模式(简单工厂模式 Simple Factory Pattern, 工厂方法模式 FactoryMothed Parttern,抽象工厂模式 Abstra...

风之源
2018/08/06
0
0
java23种设计模式十四(连载)

十四、原型模式 原型模式属于对象的创建模式,它要求对象可以“克隆”自身,从而可以复制本身的对象来创建一个实例。通过原型创建的对象,不需要关心这个实例本身,只要实现了克隆方法,就可...

lynnlovemin
2017/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
22
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
17
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
27
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部