博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原型模式(Prototype)
阅读量:5122 次
发布时间:2019-06-13

本文共 1965 字,大约阅读时间需要 6 分钟。

简历复印---原型模式(Prototype)

原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。

.Net在System命名空间中提供了ICloneable接口,其实就是唯一的 一个方法Clone(),只需要实现这个接口就可以实现原型设计模式了。

MemverwiseClone()方法是这样的,如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象,因此,原始对象极其复本引用同一个对象。

“浅复制”是指被复制的对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

“深复制”是把引用对象的变了指向复制复制过的新对象,而不是原有的被引用的对象。

简历深复制的实现:

工作经历类

using System;

using System.Collections.Generic;
using System.Text;

namespace ICloneableInfo

{
    public class WorkExperinece :ICloneable
    {
        private string workDate;

        public string WorkDate

        {
            get { return workDate; }
            set { workDate = value; }
        }
        private string company;

        public string Company

        {
            get { return company; }
            set { company = value; }
        }

        public Object Clone()

        {
            return (Object)this.MemberwiseClone();
        }
    }
}

简历类:

 

using System;

using System.Collections.Generic;
using System.Text;

namespace ICloneableInfo

{
    public class Resume : ICloneable
    {
        private int age;
        private string name;
        private string sex;
        private WorkExperinece work;
        public Resume(string name)
        {
            this.name = name;
            work = new WorkExperinece();
        }

        public Resume(WorkExperinece work)

        {
            this.work = (WorkExperinece)work.Clone();
        }
        //设置个人信息
        public void SetPersonalInfo(string sex, int age)
        {
            this.sex = sex;
            this.age = age;
        }

        //设置工作经历

        public void SetWorkExperisence(string timeArea, string company)
        {
            work.WorkDate = timeArea;
            work.Company = company;
        }

        public string  Display()

        {
            string reStr = name + " " + sex + " " + age + "";
            reStr += "工作经历" + work.WorkDate + " " + work.Company;
            return reStr;
        }

        public Object Clone()

        {
            Resume obj = new Resume(this.work);
            obj.name = this.name;
            obj.sex = this.sex;
            obj.age = this.age;
            return obj;
        }
    }
}

客户端调用:

 

 Resume a = new Resume("大鸟");

 a.SetPersonalInfo("男", 23);
 a.SetWorkExperisence("2009.2-2010.8", "厦门XX软件有限公司");

 Resume b = (Resume)a.Clone();

 b.SetWorkExperisence("2008.10-2009.2","厦门YY软件有限公司");

 richTextBox1.Text = a.Display() +"\n" +b.Display();

 

转载于:https://www.cnblogs.com/IcefishBingqing/archive/2010/08/26/1809515.html

你可能感兴趣的文章
如何提高生产力(二)、软件的开发与采购
查看>>
汉军Hundre考勤数据库数据表分析总结
查看>>
使用with 创建视图
查看>>
【整理】强化学习与MDP
查看>>
双内核问题
查看>>
【转】android程序连接网络出现android.os.NetworkOnMainThreadExceptionat
查看>>
编程是一门实践性的科学
查看>>
判断 JS 中对象的类型
查看>>
从燃尽图看项目管理:你的项目哪里出错了?(燃尽图类型全解析)
查看>>
Python模块及其导入
查看>>
20172329 2017-2018-2 《程序设计与数据结构》实验一报告
查看>>
验证码
查看>>
代码实践
查看>>
学习曾国藩,学做人做事学技术
查看>>
【例3-4】求后序遍历
查看>>
python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)...
查看>>
如何优化虚拟桌面
查看>>
[jQuery] jQuery函数
查看>>
[NOIP2010提高组]关押罪犯
查看>>
线段树(单点更新(模板)) 之 hdu 1166
查看>>