public void TestMethod1() { //这种情况只会创建一次 //SingletonDemo demo = SingletonDemo.CreateInstance(); //SingletonDemo demo2 = SingletonDemo.CreateInstance(); //程序执行异步调用 对象可能会被初始化多次 //for (int i = 0; i < 100; i++) //{ // new Action(() => // { // SingletonDemo demo = SingletonDemo.CreateInstance(); // }).BeginInvoke(null, null); //} //程序执行异步调用 对象可能会被初始化多次 //for (int i = 0; i < 100; i++) //{ // new Action(() => // { // SingletonDemo demo = SingletonDemo.CreateInstance2(); // }).BeginInvoke(null, null); //} ////静态构造方法创建 //SingletonDemo demo = SingletonDemo.CreateInstance3(); SingletonDemo demo = SingletonDemo.CreateInstance4(); }
public static void Main(string[] args) { SingletonDemo.DoDemo(); PrototypeDemo.DoDemo(); ReadKey(); }
public CreationalPattern(SchoolMemberFactoryResolver schoolMemberFactoryResolver) { _burritoDemo = new BurritoDemo(); _factoryDemo = new FactoryDemo(); _prototypeDemo = new PrototypeDemo(); _singletonDemo = new SingletonDemo(); _abstractFactoryDemo = new AbstractFactoryDemo(schoolMemberFactoryResolver); }
public static SingletonDemo CreateInstance() { if (Instance == null) { Instance = new SingletonDemo(); } return(Instance); }
public static SingletonDemo CreateInstance2() { lock (Singleton_Lock) { if (Instance == null) { Instance = new SingletonDemo(); } } return(Instance); }
static void Main(string[] args) { Console.WriteLine("Singleton:"); SingletonDemo.Demo(); Console.WriteLine("\r\nInstance:"); InstanceDemo.Demo(); Console.WriteLine("\r\nExclusive:"); ExclusiveDemo.Demo(); Console.WriteLine("\r\nBy Type:"); ByTypeDemo.RegisterServices(); ByTypeDemo.ByTypeParameter(typeof(ServiceManagerByTypeDemo.ICat)); ByTypeDemo.ByTypeParameter(typeof(ServiceManagerByTypeDemo.IDog)); ByTypeDemo.ByGenericParameter <ServiceManagerByTypeDemo.ICat>(); ByTypeDemo.ByGenericParameter <ServiceManagerByTypeDemo.IDog>(); }
private static void Task1() { var Faculty = SingletonDemo.CreateInstance(); Faculty.Display("Employee Object consumes singleton instance"); }
private static void Task2() { var Student = SingletonDemo.CreateInstance(); Student.Display("Student Object consumes singleton instance"); }
private static void Task3() { var Department = SingletonDemo.CreateInstance(); Department.Display("Dept Object consumes singleton instance"); }
static void Main(string[] args) { { //测试反射调用构造函数 ReflectorTest ct = new ReflectorTest(); } { //测试单例 Console.WriteLine("---------------测试单例----------------"); SingletonDemo singletonDemo1 = SingletonDemo.GetInstance(); SingletonDemo singletonDemo2 = SingletonDemo.GetInstance(); SingletonDemo singletonDemo3 = SingletonDemo.GetInstance(); SingletonDemo singletonDemo4 = SingletonDemo.GetInstance(); SingletonDemo singletonDemo5 = SingletonDemo.GetInstance(); Console.WriteLine(singletonDemo5.GetInstanceCount()); Console.WriteLine(object.ReferenceEquals(singletonDemo1, singletonDemo5)); //反射破坏单例 Console.WriteLine("---------------测试反射破坏单例----------------"); Assembly assembly = Assembly.Load("反射"); Type type = assembly.GetType("反射.Singleton.SingletonDemo"); SingletonDemo singleton1 = (SingletonDemo)Activator.CreateInstance(type, true);//调用私有构造函数来创建对象(参数true) SingletonDemo singleton2 = (SingletonDemo)Activator.CreateInstance(type, true); Console.WriteLine(singleton1.GetInstanceCount()); Console.WriteLine(singleton2.GetInstanceCount()); Console.WriteLine(object.ReferenceEquals(singleton1, singleton2)); } { Console.WriteLine("---------------测试泛型----------------"); Assembly assembly = Assembly.Load("反射"); Type type = assembly.GetType("反射.Generic.GenericDemo`2").MakeGenericType(new Type[] { typeof(string), typeof(int) });//`2:代表泛型类有两个泛型参数(T,S)占位符,MakeGenericType:确定泛型参数类型,以供泛型类的实例化 GenericDemo <string, int> demo = (GenericDemo <string, int>)(Activator.CreateInstance(type)); } { Console.WriteLine("---------------测试调用方法----------------"); Assembly assembly = Assembly.Load("反射"); Type type = assembly.GetType("反射.reflector.ReflectorTest"); object obj = Activator.CreateInstance(type); MethodInfo method = type.GetMethod("RelectorMehtod", new Type[] { typeof(string), typeof(int) });//如果类中有两个及以上同名方法,则需要指定new type[]参数,以区分是哪个重载方法 method.Invoke(obj, new object[] { "luox", 123 }); Console.WriteLine("---------------测试调用私有方法----------------"); MethodInfo privateMethod = type.GetMethod("PrivateMethod", BindingFlags.Instance | BindingFlags.NonPublic);//如果类中有两个及以上同名方法,则需要指定new type[]参数,以区分是哪个重载方法 privateMethod.Invoke(obj, new object[] { "luox", 123 }); Console.WriteLine("---------------测试调用静态方法----------------"); MethodInfo staticMethod = type.GetMethod("StaticMethod"); //method.Invoke(staticMethod, new object[] { "luox", 123 }); staticMethod.Invoke(null, new object[] { "luox", 123 }); MethodInfo genericMethod = type.GetMethod("GenericMehtod").MakeGenericMethod(new Type[] { typeof(string), typeof(int) });//type[]代表泛型类型,按顺序填写 genericMethod.Invoke(obj, new object[] { "luox", 123, "exd" }); } { Assembly assembly = Assembly.Load("反射"); Type type = assembly.GetType("反射.reflector.ReflectorTest"); Console.WriteLine("---------------测试获取成员变量----------------"); foreach (var item in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { Console.WriteLine($"成员名称:{item.DeclaringType} {item.MemberType} {item.Name}"); } Console.WriteLine("---------------测试获取属性----------------"); foreach (var item in type.GetProperties()) { Console.WriteLine($"成员名称:{item.DeclaringType} {item.MemberType} {item.Name}"); } Console.WriteLine("---------------测试获取事件----------------"); foreach (var item in type.GetEvents(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { Console.WriteLine($"成员名称:{item.DeclaringType} {item.MemberType} {item.Name}"); } } Console.ReadLine(); }
/// <summary> /// 静态构造函数:由CLR保证在第一次使用这个类之前,调用而且只调用一次 /// </summary> static SingletonDemo() { Instance = new SingletonDemo(); }