• 设计模式原型模式


     [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);
            }
  • 相关阅读:
    Java 中的JOption函数
    01背包与完全背包(对比)
    AC注定不平坦(大神回忆录)
    背包精讲之——01背包
    动规问题概述(待整理)
    背包九讲
    Tautology(递推)||(栈(stack))(待整理)
    深度优先和广度优先区别
    Linux下JDK、Tomcat的安装及配置
    同IP不同端口Session冲突问题
  • 原文地址:https://www.cnblogs.com/imap/p/2627831.html
Copyright © 2020-2023  润新知