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

  • 相关阅读:
    批量管理服务器,批量分发文件
    IIS最大连接数优化
    在CentOS 7中安装与配置JDK8
    可扩展流程设计工具方案
    An internal erroroccurred during: "Removing compiler problem markers...".java.lang.String
    .NET和java之争实没必要
    提高生产率的VS插件
    Java Synchronized关键字
    Flex拖动实现方法
    WF3.0和4.0区别介绍
  • 原文地址:https://www.cnblogs.com/ljdong7/p/12553463.html
Copyright © 2020-2023  润新知