设计模式的艺术之道--原型模式

本文介绍了设计模式中的原型模式,通过实例分析了如何使用原型对象来创建新的对象,涉及浅克隆和深克隆的概念,以及如何通过序列化和反射实现深克隆。文章还探讨了原型模式在简化对象创建过程、提高效率和实现撤销功能等方面的优势,以及在某些场景下的适用性。
摘要由CSDN通过智能技术生成

设计模式的艺术之道–原型模式

声明:本系列为刘伟老师博客内容总结(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#语言提供的克隆机制

        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值