【大话设计模式读书笔记——原型模式】

原型模式

原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。

原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。

    /// <summary>
    /// 简历类
    /// </summary>
    public class Resume : ICloneable
    {
        private string name;
        private string sex;
        private int age;
        private WorkExperience workExperience;
        public Resume(string name)
        {
            this.name = name;
            workExperience = new WorkExperience();
        }
        private Resume(WorkExperience workExperience)
        {
            this.workExperience = (WorkExperience)workExperience.Clone();
        }
        /// <summary>
        /// 设置个人信息
        /// </summary>
        /// <param name="sex"></param>
        /// <param name="age"></param>
        public void SetPersonInfo(string sex,int age)
        {
            this.sex = sex;
            this.age = age;
        }
        /// <summary>
        /// 设置工作经验
        /// </summary>
        /// <param name="workDate"></param>
        /// <param name="company"></param>
        public void SetWorkExperience(string workDate, string company)
        {
            workExperience.WorkDate = workDate;
            workExperience.Company = company;
        }

        /// <summary>
        /// 显示
        /// </summary>
        public void Display()
        {
            Console.WriteLine("{0} {1} {2}",name,sex,age);
            Console.WriteLine("工作经历 {0} {1}", workExperience.WorkDate, workExperience.Company);
        }
        /// <summary>
        /// 一般在初始化信息不可发生变化的情况下,克隆是最好的办法。这即隐藏了对象创建的细节,又对性能是大大的提高。
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            //MemberwiseClone:返回当前对象的浅表副本(它是Object对象的基方法)
           // return this.MemberwiseClone();//浅度复制:如果字段是值类型的,则对字段执行逐位的复制。如果字段是引用类型,则复制引用但不复制对象。因此,原始对象及其副本对象为同一对象。

            Resume obj = new Resume(workExperience);
            obj.name = name;
            obj.age = age;
            obj.sex = sex;
            return obj;
        }
    }

    /// <summary>
    /// 工作经历
    /// </summary>
    public class WorkExperience: ICloneable
    {
        public string WorkDate { get; set; }
        public string Company { get; set; }

        public object Clone()
        {
            return this.MemberwiseClone();// 浅拷贝
        }
    }
 //浅复制:被复制的对象所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象
            //深复制:把引用对象的变量指向复制过的新对象,而不是原来的被引用对象。

            Resume b = (Resume)a.Clone();
            b.SetPersonInfo("男", 30);
            b.SetWorkExperience("1998-20001", "BBB公司");

            Resume c = (Resume)a.Clone();
            c.SetPersonInfo("男", 31);
            c.SetWorkExperience("1998-20002", "CCC公司");

            a.Display();
            b.Display();
            c.Display();
输出:
大鸟 男 29
工作经历 1998-2000 AAA公司
大鸟 男 30
工作经历 1998-20001 BBB公司
大鸟 男 31
工作经历 1998-20002 CCC公司

原文地址:https://www.cnblogs.com/q975261413/p/8168081.html

时间: 2024-10-06 21:59:22

【大话设计模式读书笔记——原型模式】的相关文章

【大话设计模式读书笔记——代理模式】

代理模式 代理者是指一个类别可以作为其它东西的接口.代理者可以作任何东西的接口:网络连接.内存中的大对象.文件或其它昂贵或无法复制的资源. 维基百科-代理模式 代理模式实现远程图片加载 /// <summary> /// 图片接口 /// </summary> interface IImage { void Display(); } /// <summary> /// 真实图片类 /// </summary> public class RealImage :

大话设计模式读书笔记2——策略模式

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合. UML 图: 根据<大话设计模式>——第二章 商场促销这个案例代码来简单的记录一下策略模式的使用方式: /// <summary> /// 现金收费抽象类 /// </summary> public abstract class CashSuper { /// <summary> ///

大话设计模式读书笔记1——简单工厂模式

最近几日,重温了一下<大话设计模式>这本书,当时读的仓促,有很多没有注意的地方,现在仔细翻看起来,发现这值得细细品味的一本书!! 好东西就要记下来!!! 第一章笔记:从一个简单的计算器程序来看简单工厂模式. 变化的地方就要封装,用一个单独的类来做创造实例的过程这就是工厂. UML图: /// <summary> /// 运算类 /// </summary> public class Operation { public double Number1 { get; set

大话设计模式读书笔记2——单例模式

单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 我们来看一下单例模式下的饿汉模式代码: /// <summary> /// 饿汉模式 /// </summary> public class Singleton { //私有的构造器 private Singleton() {

大话设计模式读书笔记--6.原型模式

简单的复制粘贴极有可能造成重复代码的灾难, 但是java中提供了克隆的功能, 如果一个对象创建过程复杂,又要频繁使用, 在初始化信息不发生变化的情况下,应当采取克隆而不是new一个对象 定义 原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 也就是说, 只需知道原型对象的类型,就可以拷贝, 拷贝分为浅拷贝和深拷贝,可参考浅拷贝和深拷贝 模式结构 Prototype: 抽象原型类,声明克隆接口 ConcretePrototypeA: 具体的原型类, 实现克隆操作 模式实现

大话设计模式读书笔记--设计模式总结

前言 大话设计模式看了两遍,之前看过一遍,理解的不深刻, 这次用了一个月多点的时间再次温习,利用下班后的时间回来学习,把学习心得记录下来,加深了对面向对象的理解 之前是看到一个需求搞清楚业务流程之后立刻就去做了,很少从设计层面的角度考虑,现在在开发程序时,开始有了设计的思想,也有了达到可维护,可复用,可扩展目的具体的实现方法 每当看到经过优化代码的效果时,就想起一句话:精彩的代码是如何想出来的,比看到精彩的代码更加令人兴奋 下面是用自己的话进行的总结,以便加深记忆和理解 创建型 抽象工厂 定义:

设计模式(&quot;大话设计模式&quot;读书笔记 C#实现)

前言:毫无疑问 ,学习一些设计模式,对我们的编程水平的提高帮助很大.写这个博客的时候自己刚开始学习设计模式,难免有错,欢迎评论指正. 我学设计模式的第一本书是“大话设计模式”. 1.为什么要学设计模式? 设计模式的存在就是为了抵御需求变更.学会了这些思想,开始一个项目的时候考虑的更多,当用户提出变更的时候项目改动更少. 2.怎么才能学会设计模式? 我不知道,不过轮子哥(vczh)文章中的一句话,我觉得对,就是:“设计模式就是因为情况复杂了所以才会出现的,所以我们只能通过复杂的程序来学习设计模式.

大话设计模式读书笔记(一)

上周从同事那里搞到一本大话设计模式的书,便看了起来,对于我这种非科班出身的人来说,还是很有用处的.这些设计模式的终极目的都是让代码更好看,更好用,更好拓展,在需求变化的时候,尽可能少的改动代码 先记录自己已经学到的几个部分: 1.开放——封闭原则 软件实体对于拓展的开放的,对于修改时封闭的.及对已经写好的类来说尽力避免修改,可以通过拓展其父类来实现对他的修改.增强可维护性. 2.单一职责原则 就一个类而言,应该只有一个引起它变化的原因 具体而言,如果你能想到多于一个动机去改变一个类,那么这个类就

设计模式之笔记--原型模式(Prototype)

原型模式(Prototype) 类图 描述 原型模式: 提供一个克隆自身的接口--Clone方法. 应用场景 定义一个学生类,包含一个值类型(int)的Age属性.两个引用类型Name(string)和Course属性. public class Course { public string Name { get; set; } } public class Student : ICloneable { public string Name { get; set; } public int Ag