不灬赖

自律>>自由>>自信

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

//抽象原型

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的方法创建一个对象,然后由工厂方法提供给调用者。

posted on 2020-03-23 17:20  不灬赖  阅读(117)  评论(0)    收藏  举报