Java 实现原型(Prototype)模式
2024-08-29 12:58:55
public class BaseSpoon implements Cloneable {//spoon 匙, 调羹
String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
protected BaseSpoon clone() throws CloneNotSupportedException {
System.out.println("clone a BaseSpoon");
BaseSpoon object = null;
try {
object = (BaseSpoon) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
System.err.println("BaseSpoon is not Cloneable");
}
return object;
}
}
public class SaladSpoon extends BaseSpoon { public SaladSpoon() {
setName("Salad Spoon");//沙拉 匙
}
}
public class SoupSpoon extends BaseSpoon { public SoupSpoon() {
setName("Soup Spoon");//汤匙
}
}
/*
* 原型模式
* 用原型实例指定创建对象的种类。而且通过拷贝这些原型创建新的对象。 * Prototype原型模式是一种创建型设计模式。Prototype模式同意一个对象再创建另外一个可定制的对象,根本无需知道不论什么怎样创建的细节,
* 工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
* 在java中 体现为 clone() 对象
*/
public class Test {
public static void main(String[] args) throws CloneNotSupportedException {
//创建原型
BaseSpoon soup1 = new SoupSpoon();
BaseSpoon salad1 = new SaladSpoon();
//clone原型 得到新对象
SoupSpoon soup2 = (SoupSpoon) soup1.clone();
SaladSpoon salad2 = (SaladSpoon) salad1.clone();
//输出clone后原型和相应新对象的名字
System.out.println("clone 后:" + soup1.getName() + "-" + soup2.getName());
System.out.println("clone 后:" + salad1.getName() + "-" + salad2.getName()); soup1.setName("soup1 spoon");
salad1.setName("salad1 spoon");
soup2.setName("soup2 spoon");
salad2.setName("salad2 spoon"); System.out.println("属性又一次赋值后:" + soup1.getName() + "-" + soup2.getName());
System.out.println("属性又一次赋值后:" + salad1.getName() + "-" + salad2.getName());
}
}
最新文章
- 用大白话聊聊JavaSE -- 如何理解Java Bean(一)
- Oracle 把秒转成时分秒格式(hh24:mm:ss);检测字符串是否是数字;字符串转换为数字
- gcc【数学几何】
- SimpleHashTable
- ubuntu14.04配置impala的odbc连接
- 学习Shell脚本编程(第2期)_编写修改权限及执行Shell程序的步骤
- App轮播图
- 6、iOS快速枚举
- 30分钟快速学习Shell脚本编程
- nginx中location匹配顺序
- git本机服务器配置(三):Gitblit的安装
- Python-简单的爬虫语句
- Linux下查看磁盘挂载的几种方法
- PHP开发——函数
- ABP框架系列之四十六:(Setting-Management-设置管理)
- db2 backup export
- bootstrapValidator常用验证规则总结
- phalcon7开发环境搭建
- html select与option标签
- 从Vue文件到Html文件
热门文章
- 杭电 1051 Wooden Sticks
- 牛客网暑期ACM多校训练营(第六场) J Heritage of skywalkert(数论, eth_element)
- sublime__最全面的 Sublime Text 使用指南
- ES6(Module模块化)
- 【02】你是如何理解 HTML 语义化的,有什么好处
- 每天一个linux命令目录(转)
- Codeforces 547B. Mike and Feet[单调栈/队列]
- 解决centos7中ens33中不显示IP等问题
- SLF4J 简单日志门面 介绍和使用
- 洛谷 [P2216] 理想的正方形