原型模式 prototype 创建型 设计模式(七)
意图
原型模式的根本-拷贝
- 创建一个Object类型的引用名为 ref
- 创建了一个Object类型的对象
- 使变量ref指向这个新的对象的内存地址



结构

代码示例
package prototype;
public interface Prototype extends Cloneable {
Prototype clone();
}
package prototype;
public class ConcreatePrototype implements Prototype {
@Override
public Prototype clone() {
try{
return (Prototype)super.clone();
}catch (CloneNotSupportedException e){
return null;
}
}
}
package prototype;
public class Client {
public static void main(String[] args){
Prototype prototype = new ConcreatePrototype();
Prototype clonedObj = (Prototype)prototype.clone();
System.out.println(clonedObj.getClass());
System.out.println(prototype == clonedObj);
}
}

Java天然的原型模式

- 对于任何对象 x,表达式:x.clone() != x,克隆对象与原始对象不是同一个对象
- x.clone().getClass() == x.getClass() ,克隆对象与原始对象是同一种类型
- x.clone().equals(x) 为true
- 实现Cloneable接口
- 覆盖或者使用继承而来的clone()方法

拥有管理器的原型模式

示例代码
package prototype;
import java.util.HashMap;
public class PrototypeManager {
/*hashMap维护原型对象
* */
private HashMap<String,Object> map = new HashMap<>();
/*饿汉式单例模式返回创建原型对象管理器
逻辑上原型对象管理器只有一个
* */
private static PrototypeManager prototypeManager= new PrototypeManager();
public static PrototypeManager getPm(){
return prototypeManager;
}
/*初始化内置两个原型对象
* */
private PrototypeManager(){
map.put("product1",new ConcreatePrototype());
map.put("product2",new ConcreatePrototype());
}
/*提供了添加原型对象方法*/
public void add(String key,Prototype prototype){
map.put(key,prototype);
}
/*提供了获取对象的方法,获取的对象依赖的是clone,而不是保存进去的对象*/
public Prototype get(String key){
return ((Prototype)map.get(key)).clone();
}
}

适用场景
总结
原型模式 prototype 创建型 设计模式(七)的更多相关文章
- 设计模式05: Prototype 原型模式(创建型模式)
Prototype 原型模式(创建型模式) 依赖关系的倒置抽象不应该依赖于实现细节,细节应该依赖于抽象.对所有的设计模式都是这样的. -抽象A直接依赖于实现细节b -抽象A依赖于抽象B,实现细节b依赖 ...
- Java设计模式05:常用设计模式之原型模式(创建型模式)
1. Java之原型模式(Prototype Pattern) 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象. ...
- 跟着实例学习设计模式(7)-原型模式prototype(创建型)
原型模式是创建型模式. 设计意图:用原型实例指定创建对象的类型,并通过拷贝这个原型来创建新的对象. 我们使用构建简历的样例的类图来说明原型模式. 类图: 原型模式主要用于对象的复制.它的核心是就是类图 ...
- 谈谈设计模式~原型模式(Prototype)
返回目录 原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例(clone),而不是新建(new)实例.被复制的实例就是我们所称的“原型”,这个原型是可定制的. 原型模式 ...
- 原型模式--prototype
C++设计模式——原型模式 什么是原型模式? 在GOF的<设计模式:可复用面向对象软件的基础>中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.这这个定义中,最 ...
- 设计模式(四)原型模式Prototype(创建型)
设计模式(四)原型模式Prototype(创建型) 1. 概述 我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象 ...
- 设计模式学习之原型模式(Prototype,创建型模式)(5)
通过序列化的方式实现深拷贝 [Serializable] public class Person:ICloneable { public string Name { get; set; } publi ...
- Prototype,创建型模式
读书笔记_探索式测试_混合探索式测试 一.测试场景 1.讲述用户故事 2.描述需求 3.演示产品功能 4.演示集成场景 5.描述设置和安装 6.描述警告和出错情况 二.使用基于场景的探索式测试 1 ...
- OOAD-设计模式(三)之创建型设计模式(5种)
前言 前面介绍了OOAD的基础知识,现在我们来详细的说明一下GOF设计模式中的23种模式,希望大家能够学到东西! 一.工厂方法模式(Factory Method) 1.1.工厂方法模式概述 工厂方法模 ...
随机推荐
- 蛤?你要用html做游戏?(笔记版)
标签(空格分隔):canvas html game 本书是看<html5 Canvas游戏开发实战>(2013)笔记 博主小白,啥也不懂类型,这只是一个笔记,需要的话可以看原书. 书张这样 ...
- 20181125第二章节总结part3
数据-元祖 元祖的是可存放多个值,不可变,有顺序的,从左向右编号. 作用是可以用来存储一些不可以更改的配置文件 基本 语法: #创建新元祖 tuple = (,,,,,) #索引,写法同list tu ...
- Unity-修改Debug日志文本颜色
Unity开发过程中Debug信息是非常重要的,但是千篇一律的白色字符不能迅速找出想要的信息,添加些字体颜色是个很好的办法,比如: AppDebug.Log("<color=#ff84 ...
- c#发送短息验证码
<add key="WebReference.Service.PostUrl" value="http://106.ihuyi.cn/webservice/sms1 ...
- Docker容器跨主机通信
默认情况下Docker容器需要跨主机通信两个主机节点都需要在同一个网段下,这时只要两个Docker容器的宿主机能相互通信并且该容器使用net网络模式,改实现方式为网桥模式通信: 除此之外我们还可以通过 ...
- 问题解决:Spyder不支持OpenCV模块代码提示
在使用中遇到的问题是,Spyder的代码完成功能不支持某些编译模块(.pyd后缀),如OpenCV的Python模块cv/cv2,在编写脚本文件时,在已存在import cv&import c ...
- codeforces_Codeforces Round #541 (Div. 2)_abc
A. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- pip和cmd常用命令
1.pip常用命令 显示模块的详情 pip show 安装模块 pip install 模块名称 卸载模块 pip uninstall 模块名称 查看当前环境 ...
- Java 延迟队列使用
延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到…… 应用场景比较多,比如延时1分钟发短 ...
- 互联网最新kafka技术面试题含答案
1.Kafka 的设计时什么样的呢? Kafka 将消息以 topic 为单位进行归纳 将向 Kafka topic 发布消息的程序成为 producers. 将预订 topics 并消费消息的程序成 ...