单利模式
确保一个类只有一个实例,并提供一个访问它的全局访问点
下面用代码来实现:
class="code_img_closed" src="/Upload/Images/2017082416/0015B68B3C38AA5B.gif" alt="">
/// <summary> /// 单利模式类 /// /// </summary> public class interest { /// <summary> /// 定义一个单利锁 /// </summary> private static object _lock = new object(); /// <summary> /// 申明一个私有的全局访问变量 /// </summary> private static interest ins = null; /// <summary> /// 定义私有构造函数 不能使用new实例化 /// </summary> private interest() { } /// <summary> /// 创建一个静态方法 返回该类的实例 /// </summary> /// <returns></returns> public static interest GetIntance() { // 当第一个线程运行到这里时,此时会对locker对象 "加锁", // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁 lock (_lock) { if (ins == null) { ins = new interest(); } } /* 更好的实现方式 使用双重锁 * */ //if (ins == null) { // lock (_lock) // { // if (ins == null) { // ins = new interest(); // } // } //} return ins; } public string ShowMessage(string message) { return "hellow"+message; } }logs_code_collapse">View Code
在这之前我们搞一下抽象类的概念;
什么是抽象类?由子类继承必须必须实现其方法,不能实例化,在该类中没有具体实现,用abstract来修饰;
定义一个抽象类:
1 public abstract class abstractFactory 2 { 3 4 /// <summary> 5 /// 定义吃饭基类方法 6 /// </summary> 7 /// <returns></returns> 8 public abstract eat kindeat(); 9 /// <summary> 10 /// 定义唱歌基类方法 11 /// </summary> 12 /// <returns></returns> 13 public abstract sing kindsing(); 14 15 }View Code
定义一个子类,继承抽象类,实现其方法:
public class person : abstractFactory { public override eat kindeat() { return new personeat(); } public override sing kindsing() { return new personsing(); } }View Code
抽象工厂我自己的理解是在工厂类定义一些公共特性,比如吃饭,唱歌等,同时还要做到具体事物具体分析.比如人吃大米饭,那鸟就不是吃饭了,吃虫子.而人和鸟公共特性是吃,只是吃的东西不一样而已
所以这里就可以运用抽象中来具体实现:
/// <summary> /// 抽象工厂方法基类 /// </summary> public abstract class abstractFactory { /// <summary> /// 定义吃饭基类方法 /// </summary> /// <returns></returns> public abstract eat kindeat(); /// <summary> /// 定义唱歌基类方法 /// </summary> /// <returns></returns> public abstract sing kindsing(); } /// <summary> /// 人类 /// </summary> public class person : abstractFactory { public override eat kindeat() { return new personeat(); } public override sing kindsing() { return new personsing(); } } /// <summary> /// 鸟类 /// </summary> public class brid : abstractFactory { public override eat kindeat() { return new brideat(); } public override sing kindsing() { return new bridsing(); } } /// <summary> /// 吃饭的类 /// </summary> public abstract class eat { public abstract void print(); } /// <summary> /// 唱歌类 /// </summary> public abstract class sing { public abstract void print(); } /// <summary> /// 人类吃饭类 /// </summary> public class personeat : eat { public override void print() { Console.WriteLine("我tm咋吃火锅"); } } public class brideat : eat { public override void print() { Console.WriteLine("虫子不好吃"); } } public class personsing : sing { public override void print() { Console.WriteLine( "我才唱英文歌"); } } public class bridsing : sing { public override void print() { Console.WriteLine("叽叽咋咋叽叽咋咋"); } }View Code
调用方法:
//定义一个任务 Task t1 = new Task(() => { //调用单利 Console.WriteLine(interest.GetIntance().ShowMessage("小红")); Console.WriteLine(interest.GetIntance().ShowMessage("小名")); }); //开启任务 t1.Start(); //等待线程执行完毕 Task.WaitAll(t1); //抽象工厂模式 abstractFactory person = new person(); eat e = person.kindeat(); e.print();View Code
以上就是我自己简单的理解.大神勿喷!