C#设计模式之---原型模式

原型模式(Prototype Pattern)

原型模式(Prototype Pattern) 是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。C# 提供了 ICloneable 接口,用 C# 实现原型模式很简单。

(1)使用Object的MemberwiseClone() 方法

复制代码
using System;
using System.Text;
namespace ConsoleApplication
{
    public class WebSite
    {
        public string Name { get; set; }
        public string Url { get; set; }
        static WebSite webSite = new WebSite()
        {
            Name = "cjavapy",
            Url = "https://www.cjavapy.com"
        };
        /// 
        /// 原型模式:解决对象重复创建的问题
        /// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建
        /// Object有 MemberwiseClone() 方法默认浅克隆
        /// 
        /// 
        public static WebSite CreateInstancePrototype()
        {
            return (WebSite)webSite.MemberwiseClone();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var obj=WebSite.CreateInstancePrototype();
            Console.WriteLine("Name={0},Url={1}",obj.Name,obj.Url);
            Console.ReadKey();
        }
    }
}

(2)使用ICloneable接口

复制代码
using System;
using System.Text;
namespace ConsoleApplication
{
    public class WebSite : ICloneable
    {
        public string Name { get; set; }
        public string Url { get; set; }
        static WebSite webSite = new WebSite()
        {
            Name = "cjavapy",
            Url = "https://www.cjavapy.com"
        };
        /// 
        /// 原型模式:解决对象重复创建的问题
        /// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建
        /// 
        /// 
        public static WebSite CreateInstancePrototype()
        {
            return (WebSite)webSite.MemberwiseClone();
        }
        public object Clone()
        {
            return new WebSite() { Name = this.Name, Url = this.Url };
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var obj1 = new WebSite()
            {
                Name = "cjavapy",
                Url = "https://www.cjavapy.com"
            };
            var obj2 = (WebSite)obj1.Clone();
            Console.WriteLine("Name={0},Url={1}", obj2.Name, obj2.Url);
            Console.ReadKey();
        }
    }
}
相关推荐
工程师0072 分钟前
C#中的AutoUpdater自动更新类
开发语言·c#·自动更新开源库·autoupdate
曹牧1 小时前
C#:Obsolete
开发语言·c#
我是苏苏1 小时前
Web开发:使用C#的System.Drawing.Common将png图片转化为icon图片
开发语言·c#
阿蒙Amon2 小时前
C#每日面试题-is和as的区别
java·开发语言·c#
阿蒙Amon2 小时前
C#每日面试题-简述泛型约束
java·开发语言·c#
Yu_Lijing3 小时前
基于C++的《Head First设计模式》笔记——状态模式
c++·笔记·设计模式
1314lay_10073 小时前
C# .Net 7.0 Core添加日志可视化
visualstudio·c#·.net·.netcore
Engineer邓祥浩4 小时前
设计模式学习(18) 23-16 迭代器模式
学习·设计模式·迭代器模式
gc_22994 小时前
学习C#调用OpenXml操作word文档的基本用法(17:学习文档图片类)
c#·word·图片·openxml
LcVong5 小时前
C# 基于MemoryMappedFile实现进程间通信(服务端+客户端完整范例)
linux·服务器·c#