设计模式之原型模式
来源:互联网 发布:动画ppt制作软件 编辑:程序博客网 时间:2024/05/21 00:20
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、源代码
设计模式之原型模式
阅读全文
0 0
- 设计模式之原型
- 设计模式之原型
- 设计模式 之 原型
- 设计模式之原型
- 设计模式之原型
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之-原型模式
- 设计模式之 原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之--原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 蓝桥杯 大臣的旅费(dfs)
- C++ 多继承和虚继承的内存布局
- uikit 中uialert 的使用方法UIAlertController
- 我多希望自己当年创业时,有人能告诉我这21条经验
- ArcGIS API for Javascript 3.21地图开发实例(一、图形绘制和删除及popup弹出层)
- 设计模式之原型模式
- UCI相关信息
- 机器学习----偏差、方差、线性回归
- Java DecimalFormat 用法
- 笔记
- Spring Framework的核心:IOC容器的实现
- Android视频直播的实现
- 「Chris Richardson 微服务系列」微服务架构的优势与不足
- Linux下用户所属的组