C#设计模式之五原型模式(Prototype Pattern)【创建型】

意图:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。

//抽象原型

public abstract class Prototype{

public abstract void Fight();

public abstract void BegAlms();

public abstract Prototype Clone(); 

}

public class PrototypeOne : Prototype{

public override void Fight(){

.... 

public override void BegAlms(){

.... 

public override Prototype Clone(){

return (PrototypeOne)this.MemberwiseClone(); 

}

public class PrototypeTow : Prototype{

public override void Fight(){

.... 

public override void BegAlms(){

.... 

public override Prototype Clone(){

return (PrototypeTow)this.MemberwiseClone(); 

}

public class Client{

static void Main(){

var prototypeOne1 = new Prototype().Clone();

var prototypeOne2 = new Prototype().Clone();

var prototypeOne3 = new Prototype().Clone(); 

 

var prototypeTow1 = new Prototype().Clone(); 

var prototypeTow2 = new Prototype().Clone(); 

var prototypeTow3 = new Prototype().Clone();  

 

prototypeOne1.Fight();

prototypeOne2.Fight(); 

}

MeMberwiseClone:创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到新对象。如果字段是值类型,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。

优点:简化了实例的创建结构。适用于任何的等级结构。

缺点:每个类必须有克隆方法。 

使用场景

类初始化需要消耗非常多的资源。

通过new产生一个对象需要非常繁琐的数据准备或访问权限。

一般和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者。

原文地址:https://www.cnblogs.com/ljdong7/p/12553463.html