public class Client

设计模式 - 单件 & 原型_测试程序设计模式 - 单件 & 原型_i++_02设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04    static private Hashtable ht = new Hashtable();

设计模式 - 单件 & 原型_i++_04    static protected Client c = null;

设计模式 - 单件 & 原型_i++_04

设计模式 - 单件 & 原型_i++_04    protected Client()

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_i++_04

设计模式 - 单件 & 原型_i++_04    public static Client Instance()

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04        if(c == null)

设计模式 - 单件 & 原型_i++_04            c = new Client();

设计模式 - 单件 & 原型_i++_04        return c;

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_i++_04

设计模式 - 单件 & 原型_i++_04    public void Register(String name, CloneHuman ch)

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04        ht.Add(name, ch);

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_i++_04        public CloneHuman BuildCloneHuman(String name)

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04        CloneHuman ch = (CloneHuman)ht[name];

设计模式 - 单件 & 原型_i++_04        return ch.CreateClone();

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_测试程序_35}

克隆人的类, 以及分别它的子类克隆的男人和女人

设计模式 - 单件 & 原型_i++_36public class CloneHuman

设计模式 - 单件 & 原型_测试程序设计模式 - 单件 & 原型_i++_02设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04    public virtual CloneHuman CreateClone()

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04        return null;

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_i++_04

设计模式 - 单件 & 原型_i++_04    public void Show()

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04        String s = this.GetType().ToString();

设计模式 - 单件 & 原型_i++_04        Console.WriteLine(s.Substring(s.LastIndexOf(".")+1));

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_测试程序_35}


设计模式 - 单件 & 原型_i++_36public class CloneMale : CloneHuman

设计模式 - 单件 & 原型_测试程序设计模式 - 单件 & 原型_i++_02设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04    public override CloneHuman CreateClone()

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04        return (CloneHuman)this.MemberwiseClone();

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_测试程序_35}

设计模式 - 单件 & 原型_i++_36public class CloneFemale : CloneHuman

设计模式 - 单件 & 原型_测试程序设计模式 - 单件 & 原型_i++_02设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04    public override CloneHuman CreateClone()

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04        return (CloneHuman)this.MemberwiseClone();

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_测试程序_35}


测试程序


设计模式 - 单件 & 原型_i++_36public static void Main()

设计模式 - 单件 & 原型_测试程序设计模式 - 单件 & 原型_i++_02设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04    Client c = Client.Instance();

设计模式 - 单件 & 原型_i++_04    CloneMale cm = new CloneMale();

设计模式 - 单件 & 原型_i++_04    CloneFemale cf = new CloneFemale();

设计模式 - 单件 & 原型_i++_04    c.Register("CloneMale", cm);

设计模式 - 单件 & 原型_i++_04    c.Register("CloneFemale", cf);

设计模式 - 单件 & 原型_i++_04    for(Int32 i=0; i<10; i++)

设计模式 - 单件 & 原型_子类_08设计模式 - 单件 & 原型_ide_09    设计模式 - 单件 & 原型_ide_03{

设计模式 - 单件 & 原型_i++_04        String name = (i%2==0)?"CloneMale":"CloneFemale";

设计模式 - 单件 & 原型_i++_04        CloneHuman ch = c.BuildCloneHuman(name);

设计模式 - 单件 & 原型_i++_04        ch.Show();

设计模式 - 单件 & 原型_测试程序_11    }

设计模式 - 单件 & 原型_i++_04    Console.ReadLine();

设计模式 - 单件 & 原型_测试程序_35}