zoukankan      html  css  js  c++  java
  • 设计模式原型模式

     [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);
            }
  • 相关阅读:
    [JSP] c:forEach 如何输出序号
    ckeditor_3.6.6.2+CKFinder2.0.2配置
    招聘面试技巧
    eclipse注释模板
    javadoc时候乱码-编码 GBK 的不可映射字符
    Java生成和操作Excel文件
    JOptionPane的使用
    2015内蒙古银行招聘网申注意事项
    Spring Security笔记:使用数据库进行用户认证(form login using database)
    中南大学oj:1336: Interesting Calculator(广搜经典题目)
  • 原文地址:https://www.cnblogs.com/imap/p/2627831.html
Copyright © 2011-2022 走看看