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();
        }
    }
}
相关推荐
青禾网络2 天前
Web 前端如何接入 AI 音效生成:从零到可用的完整方案
人工智能·设计模式
ZJPRENO3 天前
吃透软件开发六大设计原则,告别烂代码
设计模式
咖啡八杯3 天前
GoF设计模式——命令模式
java·设计模式·架构
花椒技术4 天前
HJPusher / HJPlayer SDK 实践:我们为什么把直播推播链路拆成一套可复用能力
设计模式·harmonyos·直播
雨落倾城夏未凉4 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
艺艺生辉4 天前
迭代器模式-"我也想被增强for循环"
设计模式
唐青枫5 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
咖啡八杯5 天前
GoF设计模式——策略模式
java·后端·spring·设计模式
唐青枫6 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net