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();
        }
    }
}
相关推荐
时光追逐者5 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 46 期(2025年7.7-7.13)
c#·.net·.netcore
mit6.8245 小时前
Why C# and .NET are still relevant in 2025
c#
liulilittle5 小时前
.NET ExpandoObject 技术原理解析
开发语言·网络·windows·c#·.net·net·动态编程
军训猫猫头6 小时前
5.浏览本地文件获取路径与文件名称 C#例子 WPF例子
开发语言·c#·wpf
绅士玖8 小时前
JavaScript 设计模式之单例模式🚀
前端·javascript·设计模式
永卿0019 小时前
设计模式-门面模式
设计模式
凤山老林9 小时前
Spring Boot中的中介者模式:终结对象交互的“蜘蛛网”困境
java·spring boot·后端·设计模式·中介者模式
找了一圈尾巴11 小时前
设计模式(结构型)-适配器模式
设计模式·适配器模式
vvilkim11 小时前
单例模式详解:确保一个类只有一个实例
单例模式·设计模式
CodeWithMe12 小时前
【读书笔记】《C++ Software Design》第六章深入剖析 Adapter、Observer 和 CRTP 模式
c++·设计模式