博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[review]Design Pattern:Prototype
阅读量:6843 次
发布时间:2019-06-26

本文共 2283 字,大约阅读时间需要 7 分钟。

Prototype

Use the current instance of a type to create a same instance with the Clone but not new.

When we use this pattern 

I have no idea now, need to dig more in the future.

Roles in this pattern 

  • Prototype: define an interface used to clone itself
  • ConcretePrototype: implement the interface of the Prototype and what's more, implement the Clone method to make the self-clone.
  • Client:Use the ConcretePrototype to clone itself.

Demo

namespace Prototype {
public abstract class Prototype {
private string id; public string Id {
get { return this.id; } } public Prototype(string id) {
this.id = id; } public abstract Prototype Clone(); } public class ConcretePrototype : Prototype {
public ConcretePrototype(string id) : base(id) { } public override Prototype Clone() {
return (Prototype)this.MemberwiseClone(); } } public class Client {
static void Main(string[] args) {
ConcretePrototype c1 = new ConcretePrototype("me"); ConcretePrototype c2 = (ConcretePrototype)c1.Clone(); Console.WriteLine(c2.Id);//show "me" here } } }

This is a common example to demonstrate this pattern, but in ASP.NET, you don't need to do like this, because there is an interface called as ICloneable available.

The ICloneable is equivalent to the Prototype defined above. So in ASP.NET, you can simplify the example above like below:

namespace Prototype {
public class ConcretePrototype : ICloneable {
private string id; public string Id {
get { return this.id; } } public ConcretePrototype(string id) {
this.id = id; } public object Clone() {
return (Object)this.MemberwiseClone(); } } public class Client {
static void Main(string[] args) {
ConcretePrototype c1 = new ConcretePrototype("me"); ConcretePrototype c2 = (ConcretePrototype)c1.Clone(); Console.WriteLine(c2.Id);//show "me" here } } }

The new version is simpler and briefer than the old one with the help of the inherent interface.

there are two concepts we got to know:

  • Shallow copy
  • Deep copy
I don't wanna detail them know here, can google or read the book

转载地址:http://ffdul.baihongyu.com/

你可能感兴趣的文章
Lync 小技巧-12-同台服务器删除Lync Server 2010安装Lync Server 2013
查看>>
【STM32 .Net MF开发板学习-17】Wifi遥控智能小车
查看>>
做程序,要“专注”和“客观”
查看>>
运维常用表格
查看>>
6.VMware View 4.6安装与部署-view桌面克隆与分配
查看>>
Azure恢复服务-DPM联机备份SQL数据库
查看>>
大分区使用xfs文件系统存储备份遇到的问题
查看>>
记录-三步走FreeMarker Template学习
查看>>
vsts项目管理理论基础——MSF
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
Unity依赖注入使用详解
查看>>
Windows GVim
查看>>
kernel_read【转】
查看>>
内核分配大块连续内存的方法【转】
查看>>
【Python】random模块
查看>>
嵌入式Linux下Camera编程--V4L2【转】
查看>>
一文读懂最近流行的CNN架构(附学习资料)
查看>>
[工具] 程序员必须软件
查看>>
.Net Discovery系列文章阅读索引--带你探索未知的.Net世界
查看>>
设计模式(一)简单工厂(创建型)(Java&&PHP)
查看>>