08 2013 档案
摘要:反射到底有什么用? 以前,假设我们要不借助任何类库直接解析Json协议的东西,比如{“a”:"A","b":"B","c":"C"},并且我们需要将他们赋给一个与之对应的实体类。那么我们需要写出如下的代码来解析 //这只是一段伪代码 while(str.Length!=0){//在一个大的while里面遍历整个字符串//这里省去解析的函数//用判断读到的名称,然后对应相应的属性进行初始化...
阅读全文
摘要:1.与Java不同,C#中的接口不能包含字段(Field)。在java中,接口中可以包含字段,但是这些字段隐式地是static和final的。而C#不允许接口中有字段,编译器在编译时就会提示错误(如下代码所示)。interface IInterface { int a ;//编译器错误提示:接口不能包含字段 }2、在C#和Java中,接口内的所有方法默认都是公用方法。在Java中,方法声明可以带有public修饰符(即使这并非必要),但在C#中,显式地为接口中的方法指定public修饰符是非法的。例如,下面的代码将产生一个编译错误。 inter...
阅读全文
摘要:备忘录模式其实就是给我们的应用程序一次撤销的机会。使用过word的人肯定会知道伟大的“Ctrl+Z”,用过PS的人更是不会忘记,应该来说基本上所有的带编辑功能的软件毫无例外都提供了撤销的功能,撤销功能给了我们1次或N次返回的机会,准确地说应该是恢复之前状态的机会。我们自己开发的软件有时候有需要撤销的功能,比如在网络通信中,常常会因为不可预知的错误就导致程序出错,这时候,要是能恢复到上一个正确的状态就太好了,这样可以省去不上功夫。我们今天要讨论的备忘录模式就是用来解决这个问题的。经典的备忘录模式如下图所示:注:本图来自《设计模式_基于C#的工程化实现及扩展》 首先,还是让我来解释一下这幅图的意思
阅读全文
摘要:在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取。比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断的话,那么我们必须遍历整个字符串,当遇到一个a,记录一下状态,判断下一个是否是所要的b。这个过程随着要判断的内容(在这里是ab)和要被字符串的长度的增长,恶心程度递增。但是又因为字符串的判断实在是太常要用到啦,所以就有了正则表达式这么个东西,正则表达式其实就是一个字符串识别的规则,通过这个规则,我们就可以让程序根据这个规则去识别了。在Java里面使用正则表达式需要涉及到两个Pattern和Mat.
阅读全文
摘要:在典型的网络通信处理软件里面(比如QQ),我们常常需要在接收到一条消息的时候,对消息进行解码、将消息写入日志文件(以便后面排查问题)、将消息写到某个界面上(如下面代码所示)。也就是说,我们一共需要通知三个不同的对象,我们收到了一条消息。这代码看着总觉得有点多余,为什么要连续写三次差不了多少的函数调用呢?所以观察者模式就是用来解决这个问题的,应用观察者模式,我们可以实现对多个观察者的通知(其实就是调...
阅读全文
摘要:假设某人一整天的流程就是“吃饭→工作→睡觉”,并且他要严格按照这个流程来,那也就是说在吃饭状态下,他只能做跟吃饭有关的事情,而不能越界做工作或者睡觉有关的事情,这就涉及到了状态的管理。在写代码的时候,我们常常要根据当前的状态,来决定下一个状态并且确定当前状态下要做什么样的事情。一般来讲,我们会写一系列的if-else if-else if-else语句来实现,但是要是状态非常多的时候,这种代码不仅...
阅读全文
摘要:经典的策略模式如下图所示:让我解释一下这幅图的含义,IContext是上下文的接口类,IStrategy是策略的接口,IStrategy依赖于IContext,也就是IContext里面存有一个IStrategy的策略字段。其实策略模式说白了,就像诸葛亮给刘备的锦囊妙计一样,遇到一种具体的情况,采取一种相应的策略。也就像我们平时会观察天气,根据今天有没有下雨,选择要不要打伞,下雨的话,那么打伞;不下雨就不打伞。下面我们用代码来演示一下经典的策略模式。我们将要做的是,从一个数组中提取一个值,这个值的提取要根据用户的选择,也就是我们要根据用户的选择提取对应的值。假设用户有三种选择,选最大值,最小值
阅读全文