原型模式 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.工厂方法模式概述 工厂方法模 ...
随机推荐
- jQuery 动态绑定插件livequery的用法
- hyperopt自动调参
hyperopt自动调参 在传统机器学习和深度学习领域经常需要调参,调参有些是通过通过对数据和算法的理解进行的,这当然是上上策,但还有相当一部分属于"黑盒" hyperopt可以帮 ...
- spring-cloud-gateway负载普通web项目
spring-cloud-gateway负载普通web项目 对于普通的web项目,也是可以通过spring-cloud-gateway进行负载的,只是无法通过服务发现. 背景 不知道各位道友有没有使用 ...
- 【原创】C# API 未能创建 SSL/TLS 安全通道 问题解决
在调用执行API之前添加以下代码就行了 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
- Centos7 编译安装 Nginx Mariadb Asp.net Core2 (实测 笔记 Centos 7.3 + Openssl 1.1.0h + Mariadb 10.3.7 + Nginx 1.14.0 + Asp.net. Core 2 )
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...
- Python-数据类型1
在Python中常见的数据类型有:整数(int).字符串(str).小数/浮点数(float).列表.元组.字典和布尔类型等,下面会进行一一介绍. 整数和小数,不用多介绍相信大家都有所了解,字符串是用 ...
- 神经网络_线性神经网络 2 (Nerual Network_Linear Nerual Network 2)
1 LMS 学习规则 1.1 LMS学习规则定义 MSE=(1/Q)*Σe2k=(1/Q)*Σ(tk-ak)2,k=1,2,...,Q 式中:Q是训练样本:t(k)是神经元的期望输出:a(k)是神经元 ...
- SQL语句基本
基础 创建数据库 CREATE DATABASE database-name 1 删除数据库 drop database dbname 1 备份sql server 创建 备份数据的 device U ...
- Lesson 29 Taxi!
Text Captain Ben Fawcett has bought an unusual taxi and has begun a new serivice. The 'taxi' is a sm ...
- CoreProfiler升级到.NetStandard 2.0
致所有感兴趣的朋友: CoreProfiler和相应的Sample项目cross-app-profiling-demo都已经升级到.NetStandrard 2.0和.NetCore 2.0. 有任何 ...