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();
        }
    }
}
相关推荐
我是唐青枫18 分钟前
C#.NET DbContext 池化机制深入解析:提升 EF Core 性能的关键
c#·.net
火鸟21 小时前
给予虚拟成像台尝鲜版九,支持 HTML 原型模式
html·原型模式·通用代码生成器·给予虚拟成像台·给予·html原型模式·快速原型
用户3721574261352 小时前
如何使用 C# 将 CSV 数据轻松转换为 PDF
c#
欠你一个bug4 小时前
Java设计模式应用--装饰器模式
java·设计模式·装饰器模式
LoveXming9 小时前
Chapter14—中介者模式
c++·microsoft·设计模式·中介者模式·开闭原则
崎岖Qiu11 小时前
【设计模式笔记06】:单一职责原则
java·笔记·设计模式·单一职责原则
Yeniden11 小时前
【设计模式】适配器模式大白话讲解!
设计模式·适配器模式
金色熊族15 小时前
装饰器模式(c++版)
开发语言·c++·设计模式·装饰器模式
西红柿维生素17 小时前
23种设计模式-框架中的使用
java·开发语言·设计模式
未孤_有青山18 小时前
库卡机器人通讯-EtherKRL-XML格式
xml·c#