当前位置: 首页 > news >正文

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();}}
}

http://www.lryc.cn/news/101779.html

相关文章:

  • STM32入门学习之外部中断
  • Jenkins 配置maven和jdk
  • Leetcode | Binary search | 22. 74. 162. 33. 34. 153.
  • 生命在于折腾——面试问题汇总
  • <Java>Map<String,Object>中解析Object类型数据为数组格式
  • 别再分库分表了,试试TiDB!
  • Java进阶之Dump文件初体验
  • 基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)
  • 曲线拟合(MATLAB拟合工具箱)位置前馈量计算(压力闭环控制应用)
  • 小程序使用echarts
  • 面向对象——封装
  • 【LeetCode】160.相交链表
  • 【JWT的使用】
  • Python获取音视频时长
  • TCP四次握手为什么客户端等待的时间是2MSL
  • Android Studio 启用设备远程调试配置完整步聚
  • 玩转LaTeX(三)【数学公式(基础)、​矩阵、多行公式】
  • jenkins 配置git
  • 单机部署MinIo并设置开机自启
  • Latex | 使用MATLAB生成.eps矢量图并导入Latex中的方法
  • 宝塔面板定时任务重启各种服务
  • Ansible playbook编写
  • 个人博客系统 -- 登录页面添加图片验证码
  • 剑指offer10-I.斐波那契数列
  • 13年测试经验,性能测试-压力测试指标分析总结,看这篇就够了...
  • 大数据课程D3——hadoop的Source
  • F5 LTM 知识点和实验 4-持久化
  • SpringBoot之WebMvcConfigurer详解
  • WPF实战学习笔记22-添加自定义询问窗口
  • Spring Boot项目的创建