原型模式 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.工厂方法模式概述 工厂方法模 ...
随机推荐
- 虚拟环境更新HA
停止HA服务 sudo systemctl stop homeassistant@homeassistant 开始更新HA sudo -u homeassistant -H -s cd /srv/ho ...
- 操作redis数据库 & 操作Excel & 开发接口
操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...
- today-Extension widget 扩展开发
设置UI部分的展开和收起
- window下如何使用文本编辑器(如记事本)创建、编译和执行Java程序
window下如何使用文本编辑器(如记事本)创建Java源代码文件,并编译执行 第一步:在一个英文目录下创建一个 .text 文件 第二步:编写代码 第三步:保存文件 方法一:选择 文件>另存为 ...
- vue常用属性
关键词:filters | 自定义过滤器 (首字母大写) <p>{{ msg | capitalize }}</p> filters: { capitalize: funct ...
- koa2学习(一)
前期准备: node环境 npm包管理工具 安装Koa npm install --save koa 第一个程序 创建index.js const Koa = require('koa'); cons ...
- MS SQL计算最大公约数和最小公倍数函数
/*求两个数的最大公约数*/ CREATE FUNCTION f_GetGys ( @num1 BIGINT , @num2 BIGINT ) RETURNS BIGINT AS BEGIN DECL ...
- ava怎样将"1413863429"字符串转换成datetime格式
.....一般来说应该是一个 毫秒数 String str ="1413863429"; Long timeLong = Long.parseLong(str); SimpleDa ...
- Ubuntu VIM下实现python自动缩进
1.打开vimrc文件 sudo vi /usr/share/vim/vimrc 2.添加 set filetype=python au BufNewFile,BufRead *.py,*.pyw s ...
- Mesos源码分析(7): Mesos-Slave的启动
Mesos-Slave的启动是从src/slave/main.cpp中的main函数开始的. 看过了Mesos-Master的启动过程,Mesos-Slave的启动没有那么复杂了. 1. ...