设计模式的艺术之道–原型模式
声明:本系列为刘伟老师博客内容总结(http://blog.csdn.net/lovelion),博客中有完整的设计模式的相关博文,以及作者的出版书籍推荐
本系列内容思路分析借鉴了刘伟老师的博文内容,同时改用C#代码进行代码的演示和分析(Java资料过多 C#表示默哀).
本系列全部源码均在文末地址给出。
本系列开始讲解创建型模式,顾名思义,这类模式主要是为了解决类的创建问题。
- 创建型模式(Creational Pattern)关注对象的创建过程。分析你怎么来的
- 创建型模式对类的实例化过程进行了抽象,对用户隐藏了类的实例的创建细节。客户不知道你怎么来的
- 创建型模式描述如何将对象的创建和使用分离,让用户在使用对象时无须关心对象的创建细节。你用就行,别管我怎么来的。
- 创建型模式关注点 创建什么(What) 由谁创建(Who) 何时创建(When)
6种常见的创建型模式
原型模式
孙悟空可以用猴毛根据自己的形象,复制(又称“克隆”或“拷贝”)出很多跟自己长得一模一样的“身外身”来。在设计模式中也存在一个类似的模式,可以通过一个原型对象克隆出多个一模一样的对象,该模式称之为原型模式。
1.1定义
- 原型模式 (Prototype Pattern):使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。
- 通过一个原型来量产其他的产品,抄作业的上学时代,小红做了一份数学作业,张三李四王五都抄了一份,内容都一模一样。
- 将一个原型对象传给要客户端对象,通过请求原型对象复制自己来实现创建过程
- 克隆所创建的对象是全新的对象,它们在内存中拥有新的地址,每一个克隆对象都是独立的
1.2情景实例
问题描述
- 工作周报系统设计
菜鸟软件公司规模越来越大,职工也越来越多,公司规定每周必须完成周报,但是有些岗位的工作内容比较存在重复性,工作周报内容都大同小异,员工对反复创建和编写工作周报产生了抱怨。周报在在线填写模式,填写完毕直接上传到服务器,不可上传本地文件。现行系统每周默认创建的周报都是空白报表,用户只能通过重新输入或不断复制粘贴来填写重复的周报内容,极大降低了工作效率。如何快速创建相同或者相似的工作周报,成为Sunny公司OA开发人员面临的一个新问题。
初步思路
对工作周报模块进行重新设计和实现:
(1)除了允许用户创建新周报外,还允许用户将创建好的周报保存为模板;
(2)用户在再次创建周报时,可以创建全新的周报,还可以选择合适的模板复制生成一份相同的周报,然后对新生成的周报根据实际情况进行修改,产生新的周报。
UML类图
关键源代码
namespace Prototype
{
class WeeklyLog:ICloneable
{
private String name;
private String date;
private String content;
public void setName(String name)
{
this.name = name;
}
public void setDate(String date)
{
this.date = date;
}
public void setContent(String content)
{
this.content = content;
}
public String getName()
{
return (this.name);
}
public String getDate()
{
return (this.date);
}
public String getContent()
{
return (this.content);
}
//克隆方法clone(),此处使用C#语言提供的克隆机制