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

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

原型模式:快速的创建一个对象而不需要提供专门的new()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象。

UML图:

示例代码:

public interface IPrototype    {        IPrototype Clone();    }
[Serializable]    public class Prototype1:IPrototype    {        public string Name { get; set; }        public int Age { get; set; }        public Prototype2 ClassLevel { get; set; }        public IPrototype Clone()        {            //return (IPrototype)this.MemberwiseClone(); //浅复制            SerializableHelper s = new SerializableHelper();            string target = s.Serializable(this);            return s.Derializable
(target); } }
[Serializable]    public class Prototype2:IPrototype    {        public string ClassName { get; set; }        public IPrototype Clone()        {            return (IPrototype)this.MemberwiseClone();        }    }
public class SerializableHelper    {        public string Serializable(object target)        {            using (MemoryStream stream = new MemoryStream())            {                new BinaryFormatter().Serialize(stream, target);                return Convert.ToBase64String(stream.ToArray());            }        }        public object Derializable(string target)        {            byte[] targetArray = Convert.FromBase64String(target);            using (MemoryStream stream = new MemoryStream(targetArray))            {                return new BinaryFormatter().Deserialize(stream);            }        }        public T Derializable
(string target) { return (T)Derializable(target); } }
static void Main(string[] args)        {            Prototype2 pro2 = new Prototype2 { ClassName = "一年级" };            Prototype1 pro1 = new Prototype1 { Age = 25, Name = "cys", ClassLevel = pro2 };            var pro11 = (Prototype1)pro1.Clone();            pro11.Name = "wxd";//修改pro11不影响pro1            pro11.ClassLevel.ClassName = "二年级";//修改修改pro11影响pro1,需要深度复制        }

 

转载于:https://www.cnblogs.com/chenyishi/p/9109415.html

你可能感兴趣的文章
深入学习微框架:Spring Boot
查看>>
Coprimes - SGU 102(求互质数,水)
查看>>
CSS布局(二) 盒子模型属性
查看>>
jQuery 获取select选中的option
查看>>
更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支
查看>>
LeetCode 112. Path Sum (二叉树路径之和)
查看>>
mysql数据恢复
查看>>
java list
查看>>
算法练习2---斐波那契数列java版
查看>>
用VISIO2013绘制E-R图
查看>>
每日站立会议03
查看>>
软件工程第一次作业
查看>>
初步了解HTML
查看>>
九度OJ 1165:字符串匹配 (模式匹配)
查看>>
Swift Storyboard找不到类文件
查看>>
Hibernate-延迟加载和立即加载
查看>>
Java中数据类型的转换
查看>>
闲扯一篇 聊聊与博客园代码改变世界的那些事
查看>>
237. Delete Node in a Linked List
查看>>
【口胡】简谈福建省夏令营
查看>>