• 设计模式原型模式


     [Serializable]
        public abstract class MyControlBase
        {
            /// <summary>
            
    /// 数据源
            
    /// </summary>
            public System.Data.DataSet MyDataSource { getset; }

            /// <summary>
            
    /// 作者
            
    /// </summary>
            public string Author { getset; }


            protected string Serialize()
            {
                using (System.IO.MemoryStream ms= new System.IO.MemoryStream () )
                {
                    new BinaryFormatter().Serialize(ms, this);
                    return Convert.ToBase64String(ms.ToArray());
                }
            }

            protected MyControlBase Deserialize(string objString)
            {
                byte[] objArr= Convert.FromBase64String(objString);
                using (MemoryStream ms = new MemoryStream (objArr) )
                {
                    return new BinaryFormatter().Deserialize(ms) as MyControlBase;
                }
            }

            public abstract MyControlBase Clone();
        }

        /// <summary>
        
    /// 面板
        
    /// </summary>
        [Serializable]
        public class MyPanel : MyControlBase
        {
            public override MyControlBase Clone()
            {
                string objStr= Serialize();
                return Deserialize(objStr);
            }
        }
    //----------------------test
     public static void PrototypePattern()
            {
                //原型模式用来创建对象,但不是用new的方式,
                
    //而是用类似clone的方式,既然是clone,那么首先
                
    //要有一个初始的被clone的对象。
                
    //一,原型模式目的:
                
    //1,创建复杂对象,降低初始化成本(有的对象的构造函数里面会执行一堆操作)。
                
    //2,简化客户端的创建对象工作(比如创建一个对象需要传一堆参数等等)。
                
    //二,原型模式应用:
                
    //1,VS上工具栏上面的控件。2,游戏中的小兵的创建。
                
    //三,本示例用序列化来实现对象的clone,这样可以保证对象的完全clone(包括深clone),
                
    //你也可以手工实现浅复制和深复制。
                MyPanel pnlTop = new MyPanel();
                pnlTop.Author = "zhaoyang";

                Button btnTop = new Button (){ ToolTip="顶部按钮"};
                pnlTop.MyDataSource = new DataSet("ds1");

                MyPanel pnlMain = pnlTop.Clone() as MyPanel;
                pnlMain.Author = "litao";


                Console.WriteLine(pnlTop.Author);
                Console.WriteLine(pnlTop.MyDataSource.DataSetName);
                Console.WriteLine(pnlMain.Author);
                Console.WriteLine(pnlMain.MyDataSource.DataSetName);
            }
  • 相关阅读:
    mysql 查询结果中增加序号
    mycat配置文件备份
    解决Python安装模块出错 ImportError: No module named setuptools
    sed 详解【转】
    CentOS下配置SFTP操作日志
    解决redis aof文件过大的问题
    mysql主从复制搭建中几种log和pos详解
    Linux下使用命令行配置IPMI
    Zabbix笔记
    zabbix_agentd.conf配置文件详解
  • 原文地址:https://www.cnblogs.com/imap/p/2627831.html
Copyright © 2020-2023  润新知