概述这里写的代码,相当于《Head First
设计模式》的读书笔记,原书是java的,自己在学习的过程中将其翻译为C#:(一)剖析经典的单件模式实现单件模式-- 确保一个类只有一个实例,并提供一个全局访问点-- 单件模式的类图可以说是所有模式的类图中最简单的-- 有一些对象其实我们只需一个,如线程池、缓存、对话框、处理偏好设置和注册表的对象、日志对象和充当打印机、显卡等设备的驱动程序的对象等。如果制造出多个实例,可能导致许多问题,如程序的行为异常、资源使用过度,或者结果不一致等 1.新建一个控制台应用程序:SingletonPatternDemo。2.新建一个类:Singleton.cs1 namespace SingletonPatternDemo2 {3 public class Singleton4 {5 /// <summary>6 /// 利用一个静态变量来记录Singleton类的唯一实例7 /// </summary>8 private static Singleton _uniqueInstance;910 //这里是其它变量...1112 /// <summary>13 /// 构造器私有化:只能在类内部才能调用构造器14 /// </summary>15 private Singleton() { }1617 /// <summary>18 /// 只能通过该方法获取到对象实例19 /// </summary>20 /// <returns></returns>21 public static Singleton GetInstance()22 {23 //【注意】如果我们不需要该实例,它就永远不会产生。这就是“延迟实例化”(lazy instantiaze)24 return _uniqueInstance ?? (_uniqueInstance = new Singleton());2526 #region 上行相当于以下代码27 //if (_uniqueInstance == null)28 //{29 // _uniqueInstance = new Singleton();30 //}3132 //return _uniqueInstance;33 #endregion34 }3536 //这里是其它方法...37 }38 }下面我们去掉注释看看1 namespace SingletonPatternDemo2 {3 public class Singleton4 {5 private static Singleton _uniqueInstance;67 private Singleton() { }89 public static Singleton GetInstance()10 {11 return _uniqueInstance ?? (_uniqueInstance = new Singleton());12 }13 }14 }哇塞,这么简单啊!如果你也这么认为的话,那就错啦......接下来,我们看下第(二)部分(二)场景应用巧克力工厂现代化的巧克力工厂具备计算机控制的巧克力锅炉,锅炉做的事,就是把巧克力和牛奶融在一起,然后送到下一个阶段,以制造成巧克力棒。这里有一个Choc-O-Holic公司的工业强度巧克力锅炉控制器,用于控制锅炉的日常运作,比如:锅炉内为空时才可以加入原料、锅炉内存在原料并且尚未煮沸时才能够进行煮沸,还有排出牛奶和巧克力的混合物时要求炉内存在已经煮沸的原料等。下列是巧克力锅炉控制器的代码:1 namespace SingletonPatternDemo2 {3 /// <summary>4 /// 巧克力锅炉5 /// </summary>6 public class ChocolateBoiler7 {8 private bool Empty { get; set; }9 private bool Boiled { get; set; }1011 //代码开始时,锅炉为空,未燃烧12 public ChocolateBoiler()13 {14 Empty = true;15 Boiled = false;16 }1718 /// <summary>19 /// 填充20 /// </summary>21 public void Fill()22 {23 //在锅炉内填入原料时,锅炉必须为空;24 //填入原料后就把两个属性标识好25 if (Empty)26 {27 //在锅炉内填满巧克力和牛奶的混合物...2829 Empty = false;30 Boiled = false;31 }32 }3334 /// <summary>35 /// 排出36 /// </summary>37 public void Drain()38 {39 //锅炉排出时,必须是满的,并且是煮过的;40 //排出完毕后将Empty标志为true。41 if (!Empty && Boiled)42 {43 //排出煮沸的巧克力和牛奶...4445 Empty = true;46 }47 }4849 /// <summary>50 /// 煮沸51 /// </summary>52 public void Boil()53 {54 //煮混合物时,锅炉必须是满的,并且是没有煮过的;55 //煮沸后,就把Boiled标识为true。56 if (!Empty && !Boiled)57 {58 //将炉内物煮沸...5960 Boiled = true;61 }62 }63 }64 }试试根据(一)中所学的内容将它修改成单例模式1 namespace SingletonPatternDemo2 {3 /// <summary>4 /// 巧克力锅炉5 /// </summary>6 public class ChocolateBoiler7 {8 private static ChocolateBoiler _uniqueInstance; //【新增】一个静态变量910 private bool Empty { get; set; }11 private bool Boiled { get; set; }1213 //代码开始时,锅炉为空,未燃烧14 private ChocolateBoiler() //【修改】原来是public15 {16 Empty = true;17 Boiled = false;18 }1920 /// <summary>21 /// 获取ChocolateBoiler对象实例22 /// </summary>23 /// <returns></returns>24 public static ChocolateBoiler GetInstance() //【新增】一个静态方法25 {26 return _uniqueInstance ?? (_uniqueInstance = new ChocolateBoiler());27 }2829 /// <summary>30 /// 填充31 /// </summary>32 public void Fill()33 {34 //在锅炉内填入原料时,锅炉必须为空;35 //填入原料后就把两个属性标识好36 if (Empty)37 {38 //在锅炉内填满巧克力和牛奶的混合物...3940 Empty = false;41 Boiled = false;42 }43 }4445 /// <summary>46 /// 排出47 /// </summary>48 public void Drain()49 {50 //锅炉排出时,必须是满的,并且是煮过的;51 //排出完毕后将Empty标志为true。52 if (!Empty && Boiled)53 {54 //排出煮沸的巧克力和牛奶...5556 Empty = true;57 }58 }5960 /// <summary>61 /// 煮沸62 /// </summary>63 public void Boil()64 {65 //煮混合物时,锅炉必须是满的,并且是没有煮过的;66 //煮沸后,就把Boiled标识为true。67 if (!Empty && !Boiled)68 {69
@H_419_0@这里写的代码,相当于《head First 设计模式》的读书笔记,原书是java的,自己在学习的过程中将其翻译为C#:
@H_419_0@(一)剖析经典的单件模式实现
@H_419_0@ <span >单件模式
@H_419_0@ -- 确保一个类只有一个实例,并提供一个全局访问点
@H_419
0@ -- 单件模式的类图可以说是所有模式的类图中最简单的
@H419_0@ -- 有一些对象其实我们只需一个,如线程池、缓存、对话框、处理偏好设置和注册表的对象、日志对象和充当打印机、显卡等设备的驱动程序的对象等。如果制造出多个实例,可能导致许多问题,如程序的行为异常、资源使用过度,或者结果不一致等
@H_419_0@ 1.新建一个控制台应用程序:SingletonPatternDemo。
@H_419_0@ 2.新建一个类:Singleton.cs
<div >
如果我们不需要该实例,它就永远不会产生。这就是“延迟实例化”(lazy instantiaze) _uniqueInstance ?? (_uniqueInstance = 上行相当于以下代码 }
@H_419_0@ 下面我们去掉注释看看
_uniqueInstance ?? (_uniqueInstance = }@H_419_0@ 哇塞,这么简单啊!如果你也这么认为的话,那就错啦......接下来,我们看下第(二)部分@H_419_0@(二)场景应用@H_419_0@ 巧克力工厂@H_419_0@ 现代化的巧克力工厂具备计算机控制的巧克力锅炉,锅炉做的事,就是把巧克力和牛奶融在一起,然后送到下一个阶段,以制造成巧克力棒。@H_419_0@ 这里有一个Choc-O-Holic公司的工业强度巧克力锅炉控制器,用于控制锅炉的日常运作,比如:锅炉内为空时才可以加入原料、锅炉内存在原料并且尚未煮沸时才能够进行煮沸,还有排出牛奶和巧克力的混合物时要求炉内存在已经煮沸的原料等。@H_419_0@ 下列是巧克力锅炉控制器的代码: Empty { ; Boiled { ; Empty = Boiled = Empty = Boiled = (!Empty && Empty = (!Empty && ! Boiled = }@H_419_0@试试根据(一)中所学的内容将它修改成单例模式 ChocolateBoiler _uniqueInstance; Empty { ; Boiled { ; ChocolateBoiler() Empty = Boiled =