当前位置: 首页 > news >正文

《Java极简设计模式》第05章:原型模式(Prototype)

作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.gitcode.host
文章汇总:https://binghe.gitcode.host/md/all/all.html
源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/java-simple-design-prototype

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:用最简短的篇幅介绍原型模式最核心的知识,理解原型模式的设计精髓,并能够灵活运用到实际项目中,编写可维护的代码。

大家好,我是冰河~~

今天给大家介绍《Java极简设计模式》的第05章,原型模式(Prototype),用最简短的篇幅讲述设计模式最核心的知识,好了,开始今天的内容。

一、概述

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

二、适用性

1.当一个系统应该独立于它的产品创建、构成和表示时。

2.当要实例化的类是在运行时刻指定时,例如,通过动态装载。

3.为了避免创建一个与产品类层次平行的工厂类层次时。

4.当一个类的实例只能有几个不同状态组合中的一种时。

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

三、参与者

1.Prototype 声明一个克隆自身的接口。

2.ConcretePrototype 实现一个克隆自身的操作。

3.Client 让一个原型克隆自身从而创建一个新的对象。

在这里插入图片描述

四、示例

Prototype

/*** @author binghe(微信 : hacker_binghe)* @version 1.0.0* @description 原型类,实现Cloneable接口* @github https://github.com/binghe001* @copyright 公众号: 冰河技术*/
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

/*** @author binghe(微信 : hacker_binghe)* @version 1.0.0* @description 原型类的子类,用于构建原型* @github https://github.com/binghe001* @copyright 公众号: 冰河技术*/
public class ConcretePrototype extends Prototype {public ConcretePrototype(String name) {setName(name);}
}

Client

/*** @author binghe(微信 : hacker_binghe)* @version 1.0.0* @description  测试类* @github https://github.com/binghe001* @copyright 公众号: 冰河技术*/
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

好了,今天就到这儿吧,相信各位小伙伴们对原型模式有了更清晰的认识,我是冰河,我们下期见~~

http://www.lryc.cn/news/148676.html

相关文章:

  • OceanBase 4.1解读:读写兼备的DBLink让数据共享“零距离”
  • STM32的HAL库的定时器使用
  • Flink+Paimon多流拼接性能优化实战
  • cocos 2.4 版本 设置物理引擎步长 解决帧数不一致的设备 物理表现不一致问题 设置帧刷新率
  • Spark及其生态简介
  • 从Instagram到TikTok:利用社交媒体平台实现业务成功
  • 单元测试
  • 科技云报道:AI+云计算共生共长,能否解锁下一个高增长空间?
  • ReactPy:使用 Python 构建动态前端应用程序
  • 安全攻防基础以及各种漏洞库
  • 护眼灯值不值得买?开学给孩子买什么样的护眼台灯
  • windows安装Scala
  • API类型和集成规范指南
  • [ES]mac安装es、kibana、ik分词器
  • YOLO目标检测——视觉显著性检测MSRA1000数据集下载分享
  • 【基于空间纹理的残差网络无监督Pansharpening】
  • 2023年信息安全管理与评估(赛项)评分标准第三阶段夺旗挑战CTF(网络安全渗透)
  • 开启智能时代:深度解析智能文档分析技术的前沿与应用
  • 高级时钟项目
  • 跨境海淘攻略:如何实现自己批量养买家账号海淘
  • 【lua】在微软 windows 系统上安装 lua
  • 系统学习Linux-PXE无人值守装机(附改密)
  • 关于web3.0平台的详细说明
  • Git命令简单使用
  • Flutter(十)网络请求和文件
  • Unity RenderStreaming 云渲染-黑屏
  • Java设计模式:四、行为型模式-04:中介者模式
  • 【GO】LGTM_Grafana_Tempo(1)_架构
  • MFC 与 QT“常用控件”对比
  • linux 下安装chrome 和 go