namespace ConsoleApplication1 { public class SimpleDemo { /* * public string name; * public static SimpleDemo instance; * public SimpleDemo(string _n) * { * instance = this; * name = _n; * } * public void Show() * { * Console.WriteLine(instance.name); * } */
/* static 被静态修饰的变量,在内存中只有一份 */ public static SimpleDemo instance; public static SimpleDemo Getinstance( string n ) { if ( instance == null ) { instance = new SimpleDemo(); instance.name = n; /* 因为instance是SimpleDemo的实例,所以name是可以调出来的 */ } return(instance); } /* ..其他的还可以写其他的属性字段 */ public string name; } class Program { static void Main( string[] args ) { SimpleDemo s6 = SimpleDemo.Getinstance( "s6" ); Console.WriteLine( s6.name ); SimpleDemo s2 = SimpleDemo.Getinstance( "s2" ); Console.WriteLine( s2.name ); /* * 输出的结果都是s6,因为在开始运行到s6的时候,instance是未创建的,是空的;所以会创建一个新的实例, * 等到第二次去运行s2的时候,instance已经创建完成了,直接返回的还是s6的实例, * 无论创建多少的SimpleDemo的实例,返回的都是同一个值 * 用处:思考了一下,感觉和修饰词Const一样,修饰了那个词,那个词的值就定了;只不过这里是可以让一个对象的值定了。 * 比如,超市一类物品属性值固定,就给这一类写个单例模式; * 单例模式,单例模式,就是这个类被实例化了一次,所有的属性就定了;不管你再实例化多少,结果还是同样的, * 实例再多还是"单例" */ /* * SimpleDemo s1 = new SimpleDemo("4"); * SimpleDemo s2 = new SimpleDemo("2"); * s1.Show();//这个是声明几个,会出现几个值,是特殊的单例模式 * Console.ReadKey(); */ Console.ReadKey(); } } }
单例模式的目的就是,确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源。
先写一个单例的类
public Class SingleClass
{
//单机模式的第一步,就是要把这个单例类的构造函数的修饰改为private,让这个类无法在外边被实例化
private SingleClass
{
}
//单机模式的第一步,不能从外边被实例化,就得从内部实例化,再提供一个获取这个使力的接口函数。
static SingleClass SignClass=null;
static Object obj=new Object();
public static SingleClass GetInstance()
{
if(SignClass==null)
{
locker(obj)
{
SignClass=new SingleClass();
}
}
return SingClasss;
}
}
如果SingClass==null,就实例化一个新的出来;如果已经实例化了,就直接返回;
其中的Lock锁,是为了避免多个线程同时多个实例化。
单例模式的讲解
红色部分呢注释掉就不是单例了。
访问数据库或者读写IO的时候,也可以用单例模式来减少资源的消耗。
整个系统!!!!!