public object Clone() { ArrayList swd = new ArrayList(); for(int i=0; i< swdata.Count; i++) swd.Add(swdata); // 创建新的 ArrayList SwimData newsd = new SwimData(swd); return newsd;}这种写法创建了新的集合容器,但集合内的 Swimmer 对象仍然是引用复制(不是真正的深克隆)。这展示了中等深度的克隆——集合独立,但元素共享。
---
3. DeepSexClone - 按性别筛选的克隆
核心特点
创建了新的子类 SexSwimData,继承自 SwimData
添加了 sort(bool isFemale) 方法,可以按性别筛选数据
UI 增加了性别选择单选按钮(Male/Female)
设计意图解释
这个项目展示了如何通过继承和多态扩展原型模式。SexSwimData 不仅实现了克隆,还在克隆后能够按性别过滤数据:
public void sort(bool isFemale) { ArrayList swd = new ArrayList(); for (int i = 0; i < swdata.Count; i++) { Swimmer sw = (Swimmer)swdata; if (isFemale == sw.isFemale()) { swd.Add(sw); } } swdata = swd; // 只保留符合条件的游泳者}---
4. RevClone - 使用 cloneMe 方法的克隆
核心特点
没有使用 ICloneable 接口,而是自定义了 cloneMe() 方法
同样使用 SexSwimData 子类,支持性别筛选
UI 与 DeepSexClone 相同,有性别选择功能
设计意图解释
cloneMe 方法的写法展示了另一种克隆实现方式:
public void cloneMe(SwimData swdat) { swdata = new ArrayList(); ArrayList swd = swdat.getData(); for(int i=0; i < swd.Count; i++) swdata.Add(swd);}这种方法不使用返回值的 Clone(),而是通过传入源对象来填充当前对象。这在某些框架设计中更灵活,因为可以先创建对象再初始化。
---
5. AgeProto - 按年龄分组的克隆
核心特点
创建了 AgeSwimData 子类
sort() 方法的实现完全不同:按年龄分组并统计
代码设计意图解释
这个项目的 sort() 方法最有创意:
public override void sort() { // 1. 按年龄排序 // 2. 统计每个年龄的人数 // 3. 用 "X" 符号表示人数(如 3 个人就是 "XXX") // 4. 创建特殊的 Swimmer 对象来存储统计信息 string name = ""; for(int j = 0; j < agecount; j++) name += "X"; Swimmer sw = new Swimmer(age.ToString() + " " + name + "," + age.ToString() + ",club,0,F");}这种写法将统计数据伪装成 Swimmer 对象,巧妙复用了现有的显示逻辑,展示了原型模式在数据变换中的应用。
---
总结对比表
项目 | 克隆方式 | 特殊功能 | 继承关系 | UI 特点 |
| SimpleProto | ICloneable(浅克隆) | 基本排序 | 无 | 简单两列 |
| DeepProto | ICloneable(深克隆集合) | 基本排序 | 无 | 简单两列 |
| DeepSexClone | ICloneable | 按性别筛选 | SexSwimData → SwimData | 有性别选择 |
| RevClone | 自定义 cloneMe() | 按性别筛选 | SexSwimData → SwimData | 有性别选择 |
| AgeProto | 自定义 cloneMe() | 按年龄分组统计 | AgeSwimData → SwimData | 简单两列 |
---
关键技术点
浅克隆 vs 深克隆
浅克隆:SimpleProto - 共享内部集合
深克隆:DeepProto - 创建新集合,但元素仍为引用
克隆实现方式
ICloneable 接口:SimpleProto, DeepProto, DeepSexClone
自定义 cloneMe() 方法:RevClone, AgeProto
多态应用
SexSwimData:按性别筛选数据
AgeSwimData:按年龄分组统计
设计模式演进
这些项目从简单到复杂,逐步展示了:
基本原型模式
深克隆实现
继承扩展功能
不同的克隆接口设计
数据变换与重用
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!