设计模式之原型模式
2017-08-24 13:46
288 查看
c#原型模式
1、定义
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要任何创建的细节。2、深复制和浅复制
1.深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象2.被复制对象的所有对象都含有与原来对象相同的值,而所有的对其他对象的引用都任然指向原来的对象
3、实现原理
UML类图2.代码实现
//抽象的原型类 abstract class AProtoType { private string id; public AProtoType(string id) { this.id = id; } public string ID { get { return id; } } //Clone()方法,抽象的关键 public abstract AProtoType Clone(); }
//具体的原型类 class ConcreteProtoTypeA : AProtoType { public ConcreteProtoTypeA(string id) : base(id) { } public override AProtoType Clone() { //创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。 //如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象; //因此原始对象及其副本引用同一个对象 return (AProtoType)this.MemberwiseClone(); } }
客户端:
class Program { static void Main(string[] args) { ConcreteProtoTypeA ct = new ConcreteProtoTypeA("123"); //克隆类ConcreteProtoTypeA的对象ct能得到新的实例copy ConcreteProtoTypeA copy =(ConcreteProtoTypeA) ct.Clone(); Console.WriteLine("Cloned:{0}",copy.ID); Console.ReadKey(); } }
输出:Cloned:123
4、实例
简历的原型实现:4.1UML类图
4.2代码实现
//简历类,实现可复制接口 class PersonResume : ICloneable { private string name; private string sex; private string age; private string timeArea; private string company; public PersonResume(string name) { this.name = name; } //设置个人信息 public void SetInfo(string sex,string age) { this.age = age; this.sex = sex; } //设置工作经历 public void WorkExprience(string timearea,string company) { this.timeArea = timearea; this.company = company; } //显示 public void Show() { Console.WriteLine("{0},{1},{2}",name,sex,age); Console.WriteLine("{0},{1}",timeArea,company); } //实现接口的方法,用来克隆对象 public object Clone() { return (object)this.MemberwiseClone(); } }
客户端:
class Program
{
static void Main(string[] args)
{
PersonResume pr = new PersonResume(“DZB”);
pr.SetInfo(“Man”,”18”);
pr.WorkExprience(“Three years”,”WKD”);
PersonResume copy = (PersonResume)pr.Clone(); copy.WorkExprience("Four Years","WKDCY"); pr.Show(); copy.Show(); Console.ReadKey(); } }
输出:DZB Man 18 Three years WKD
DZB Man 18 Four years WKDCY
5、源代码
设计模式之原型模式相关文章推荐
- iOS设计模式之原型模式
- 漫谈设计模式之原型模式(Prototype)
- Java设计模式 - Prototype(原型模式)
- 设计模式系列-原型模式
- 设计模式入门学习 原型Prototype模式
- 通过例子学设计模式之--原型模式以及使用场景说明(C++实现)
- 安卓设计模式之原型模式
- 如何让孩子爱上设计模式 —— 4.原型模式(Prototype Pattern)
- 设计模式之原型模式
- 设计模式之:原型模式
- 设计模式【1】:原型模式【创建对象】
- 老僧长谈设计模式-11-原型模式
- 设计模式 原型模式
- C# 设计模式系列教程-原型模式
- 设计模式学习(创建型模式)—原型模式(ProtoType)
- Java 设计模式-原型模式
- java设计模式_原型模式
- 设计模式 - 装饰模式、原型模式、模板模式、享元模式
- Android Ap 开发 设计模式第六篇:原型模式 推荐
- java设计模式之原型模式