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();
        }
    }
}
相关推荐
明耀19 分钟前
WPF RadioButton 绑定boolean值
c#·wpf
刷帅耍帅2 小时前
设计模式-享元模式
设计模式·享元模式
刷帅耍帅2 小时前
设计模式-模版方法模式
设计模式
Death2002 小时前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
Death2003 小时前
Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
c语言·c++·qt·3d·c#
yufei-coder3 小时前
C#基础语法
开发语言·c#·.net
yngsqq3 小时前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
刷帅耍帅3 小时前
设计模式-桥接模式
设计模式·桥接模式
MinBadGuy4 小时前
【GeekBand】C++设计模式笔记5_Observer_观察者模式
c++·设计模式
刷帅耍帅5 小时前
设计模式-生成器模式/建造者模式Builder
设计模式·建造者模式