设计模式学习笔记--原型模式

 1 using System;
 2
 3 namespace Prototype
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/5/24 19:46:36
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// WorkExperience说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class WorkExperience:ICloneable
12     {
13         private string workData;
14
15         public string WorkData
16         {
17             get { return workData; }
18             set { workData = value; }
19         }
20
21         private string company;
22
23         public string Company
24         {
25             get { return company; }
26             set { company = value; }
27         }
28
29         public object Clone()
30         {
31             return (object)this.MemberwiseClone();
32         }
33     }
34 }

 1 using System;
 2
 3 namespace Prototype
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/5/24 19:36:45
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// Resume说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class Resume:ICloneable
12     {
13         private string name;
14         private string sex;
15         private string age;
16
17         private WorkExperience workExperience;
18
19         public Resume(string name)
20         {
21             this.name = name;
22             workExperience = new WorkExperience();
23         }
24
25         private Resume(WorkExperience work)
26         {
27             this.workExperience = (WorkExperience)work.Clone();
28         }
29
30         public void SetPersonalInfo(string sex,string age)
31         {
32             this.sex = sex;
33             this.age = age;
34         }
35
36         public void SetWorkExperience(string timeArea,string company)
37         {
38             workExperience.WorkData = timeArea;
39             workExperience.Company = company;
40         }
41
42         public void Display()
43         {
44             Console.WriteLine("{0}{1}{2}",name,sex,age);
45             Console.WriteLine("工作经历:{0}{1}", workExperience.WorkData, workExperience.Company);
46         }
47
48         public object Clone()
49         {
50             Resume obj = new Resume(this.workExperience);
51             obj.name = this.name;
52             obj.sex = this.sex;
53             obj.age = this.age;
54
55             return obj;
56         }
57     }
58 }

 1 using System;
 2 namespace Prototype
 3 {
 4     class Program
 5     {
 6         static void Main(string[] args)
 7         {
 8             Resume a = new Resume("大鸟");
 9             a.SetPersonalInfo("男","29");
10             a.SetWorkExperience("1998-2000","xx公司");
11
12             Resume b = (Resume)a.Clone();
13             b.SetWorkExperience("1998-2006","YY企业");
14
15             Resume c = (Resume)a.Clone();
16             c.SetPersonalInfo("男","24");
17             c.SetWorkExperience("1998-2003","ZZ企业");
18
19             a.Display();
20             b.Display();
21             c.Display();
22         }
23     }
24 }

时间: 2024-10-12 06:45:16

设计模式学习笔记--原型模式的相关文章

设计模式学习笔记——原型模式

1.特点:在初始化信息不发生变化时考虑. 2.概念:通过复制一个已经存在的实例来创建一个新的实例.被复制的实例被称为原型,这个原型是可定制的. 3.类图: 4.程序实现: /// <summary> /// 实现了ICloneable接口的简历类 /// </summary> public class Resume:ICloneable { public Resume() { mWorkExperience = new WorkExperience(); } private str

设计模式学习05—原型模式

一.动机与定义 之前学习原型模式一直以为原型模式目的是为了方便的创建相同或相似对象,用复制对象的方式替换new的方式,还研究了深克隆和浅克隆.最近仔细看了GOF的设计模式,发现原型模式的本意并不仅仅是复制对象这么简单. 复制对象确实是一方面,当我们需要大量相似,甚至相同对象的时候,除了一个个的new之外,还可以根据一个原型,直接复制出更多的对象.但是如果把原型模式认为只是复制对象这么简单就错了. 创建型模式主要讲如何创建对象,通常包含何时创建,谁来创建,怎么创建等.GOF书里面写的意图是,用原型

设计模式学习笔记--外观模式

好久没写设计模式的blog了,这次重新回来填坑,先找一个最简单但是却最常用的设计模式来学习,外观模式.其实说是一个设计模式,其实我们在实际的编程中无时无刻不在用外观模式,可以说这个设计模式已经渗透到编程的各个方便,可能我们自己没感觉出来罢了. 一.外观模式的定义 先来看一下外观模式的定义: 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这一系列子系统更加容易使用. 简单解释一下,所谓外观模式,就是在我们设计系统的时候,将若干个子系统的功

C#学习笔记-原型模式

题目:编写基本的简历. 实现: 创建基本的Resume类,然后主函数通过实例化Resume来写简历即可. Resume类: 1 class Resume 2 { 3 private string name; 4 private string sex; 5 private string age; 6 private string timeArea; 7 private string company; 8 9 public Resume(string name) 10 { 11 this.name

设计模式学习-原型模式

1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.类图 3.代码示例 1 package com.zhaoyangwoo.prototype; 2 3 /** 4 * Created by john on 16/5/8. 5 */ 6 public class Prototype { 7 public static void main(String[] args){ 8 Product p1= new Product(); 9 p1.setName("nihao&q

设计模式之笔记--原型模式(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

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

原型模式 原型模式是创建型模式的一种,其特点在于通过"复制"一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的"原型",这个原型是可定制的. 原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效:或者创建值相等,只是命名不一样的同类数据. /// <summary> /// 简历类 /// </summary> public class Resume : ICloneable

设计模式学习之原型模式

原型模式定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 首先了解原型模式之前我们先理解一下Cloneable这个类: Cloneable接口没有定义成员.它通常用于指明被创建的一个允许对对象进行位复制(也就是对象副本)的类.如果试图用一个不支持Cloneable接口的类调用clone( )方法,将引发一个CloneNotSupportedException异常.当一个副本被创建时,并没有调用被复制对象的构造函数.副本仅仅是原对象的一个简单精确的拷贝. 原型模式的优点: 性

设计模式学习笔记-工厂模式

一.概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法(Factory Method)使一个类的实例化延迟到其子类: 2.模式中的角色 Product(Map):定义工厂方法所创建的对象的接口. ConcreteProduct(BaiduMap.GaodeMap):具体Product,实现Product接口. Creator(IMapFactory):声明工厂方法,该方法返回一个Product类型的对象. ConcreteCreator(BaiduMapFactory.Gaod