10 2007 档案
摘要:博派汽车人 总司令官: 擎天柱 补天士 旗舰:方舟号 引退领袖:钛师傅 副官:铁皮 医生:救护车 科学家:千斤顶,感知器 城市指挥官:通天晓 战士:爵士,大黄蜂,飞过山,充电器,鲁莽,大汉,变速箱,探长,横炮,飞毛 腿,警车,蓝霹雳,幻影,开路先锋,消防车,红色警报,吊车,滑车,轮胎,烟幕,宇宙飞碟,滑翔机,战戟,巨浪,浪...
阅读全文
摘要:终于看到#Develop分析器部分了,一定要用到编译原理的知识,包括后面的调试器,可我在这方面却是一纸空文。准备花一个月学习这门知识,从今天开始。 书名:《Compliers Principles,Techniques, and Tools》,李建中翻译的。 同时再读《数据结构与算法分析》,以及《数据结构习题与解答》 要记笔记了,后者用C#实现。 一个月后用这篇文章作为笔记前言。
阅读全文
摘要:当不再使用for循环,替代以foreach/GetEnumerator, 当从if条件/switch分支得到的不再是string,而是一个工厂对象, ————以上种种情形,标志着编程功力的提高。 使用迭代器,是为了访问一个集合而无需暴露它的内部表示。这里,内部表示指的是数据结构可以是树/数组/链表等等,不同的内部结构对应不同的遍历算法...
阅读全文
摘要:中介者的神奇在于我们天天在使用却丝毫感觉不到:WindowsForm和WebForm 如果说Observer是一种1对多的模式,那么中介者就是一种多对多的模式,是Observer更普遍的方式。 现实中最好的事例就是房屋中介所:某人想买房子,这期间要办理一大堆手续,会把买卖双方都搞死的,尤其是买方。于是中介机构出现了,买方只面对中介,中介会为其办理所有手续。当买方的人越来越多时,中介的作用...
阅读全文
摘要:一提到这个模式就会想到“击鼓传花”这个游戏。 这个模式的核心主要是Handler抽象类,几个设计要点: 1.它要保持对自身的一个引用,就是next字段以及相应属性 2.DoHandler()方法是一个递归遍历,直到处理完这个请求 传入的参数字符串s是等待处理的请求,当然,这个参数可以是任意类 3.HandlerRequest()方法要抽象出来, 传入的参数要与DoHandler...
阅读全文
摘要:桥模式,将意图intension与实现implementor分离。其中,意图通常用接口来定义,而实现相应为Factory,返回具体的意图Implemention1。 public interface Intention { void Echo(string message); } public class Implemention1 : Int...
阅读全文
摘要:GOF的定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 这个模式很少用到,我看过一个机器人指令的实现,使用了该模式。 两个子类的实现,TernimalExpression类是具体做事情的类;NonternimalExpression类是一个容器,它的interpret方法,负责遍历其内部的所有TernimalExpression对象: ...
阅读全文
摘要:3.1 从可串行化的类中定制XML串行化 1.格式化XML文档元素 [XmlRoot(ElementName = "Pupil", Namespace = "urn:MyNamespace")] public class Student { //则生成XML文档中,根元素 } 2.格式化XML元素 [XmlE...
阅读全文
摘要:深串行化:串行化对象的整个状态 使用命名空间: using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization.Formatters.Soap; 串行化类的标志:在...
阅读全文
摘要:浅串行化:只串行化类的公共字段和属性 公共属性必须是可读且可写的 使用命名空间:using System.Xml.Serialization; 以Book类为例: 串行化模板: public void SerializeIt(string filename) { XmlSerializer serialize...
阅读全文
摘要:从上周3开始,第二轮研究SharpDevelop,已经将近一周了,决定从今天开始,把每天的心得写下来,然后再整理成技术文章。因为之前8月份,研究过Core层,所以这一周在逐步向Base层过渡。 上周概况: 周三,研究Codon和Condition 周四,研究Property 周五,研究Services 周六,研究Main函数,StartUp模块 周日,研究Base层基本架构,同时开始将SharpD...
阅读全文
摘要:第一轮研究: 2007.7.19-2007.8.1 1.SharpDevelop使用心得 2.SharpDevelop插件图 3.从分析Main函数开始 4.AddIn插件体系 5.Service:服务层分析 总纲 6.SharpDevelop 属性结构分析 7.SharpDevelop 属性服务 8.SharpDevelop ...
阅读全文
摘要:模板方法很简单,只要有抽象类的地方,都可以看到这个模式:就是在父类中的非抽象方法中调用抽象方法。 基于委托的模板方法:从而具体实现方法可以不依赖于抽象类,达到解耦的目的 几点注意: 1.delegate声明在模板类中 2.在类DoCompA和DoCompB中定义与委托相同的方法 3.在Main()中组装委托链,调用tm.DoComp()意味着这是一个模板方法(非抽象中...
阅读全文
摘要:这个模式是对模板方法的简单包装,可以看到,只是多了一个Context类这个包装器。 以上UML图的代码很好实现,关键是Client如何使用Context类: Strategy s = new ConcreteStrategyA(); Context context = new Context(); context.St...
阅读全文
摘要:Observer模式的迷人处在于它实现了.NET事件机制,这使得它在OO设计中大放光彩。 定义:观察者模式定义了一种一对多的依赖关系,让多个观察者Observer对象同时监听某一个主题对象Subject。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 逐个分析: 1.Subject是一个集合类,负责将所有的Observer注册到弱集合arr中,这个由Attach...
阅读全文
摘要:状态模式是把各种状态封装成不同的类。 关于Context类的实现,不太同于Strategy,虽然原理是一样的: public class Context { private State stateA, stateB, state; public Context() { stateA = new State...
阅读全文
摘要:Facade简化并提供了对基础架构的统一访问,从而减少复杂性。它只是封装,可以看成黑盒。 在Web编程中,有所谓的n-层架构,就是Facade的思想,即每一层都封装好一部分功能,提供给上一层统一的方法调用,比如说数据层,将操作一次数据库的整个过程封装为一个方法,而我们在逻辑层调用该方法时,只需要传递一个SQL参数: Code highlighting produced by Actipro C...
阅读全文
摘要:这个模式用途很多,先看它的UML: abstract public class Subject { abstract public void Request(); } public class RealSubject : Subject { public override void Request() {...
阅读全文
摘要:关于组合模式,我本来写了很多,可是当看到吕振宇老哥的文章后,我觉得他那篇讲组合模式的文章是最好的,所以,删去了我原先的文章,这里部分引用他的。在结尾加一些我自己的理解。 合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 对象的树结构 一个树结构由两种节点组成:树枝节点和树叶...
阅读全文
摘要:简单又实用的模式,引用+包装 有两种适配器, 1.类适配器 只要有接口,就可以使用:继承一个类,实现另一个接口,在接口中包装继承的方法,对外表现为接口方法 2.对象适配器 对于两个类,继承一个类A,引用另一个类B(在ctor中讲B的对象传递过去) 对A中的方法重写new/override,在方法中包装B的方法 对于一个接口一个类,...
阅读全文
摘要:代码实现如下,注意几点: 1.Decorator中的Operation()方法是对被修饰对象ConcreteComponent中方法Operation()的封装 2.ConcreteDecorator中的Operation()方法是对其父类Operation()方法的封装,同时加入一些额外的新方法 3.ConcreteDecorator中的构造函数负责将修饰与被修饰对象链接在一起,如下图: ...
阅读全文
摘要:1.IHttpHandler接口 定义了实现一个HttpRequest的处理所必须实现的一些系统约定方法。 public interface IHttpHandler { //其他Request是否可以使用IHttpHandler bool IsReusable { get; } //处理HttpRequest ...
阅读全文
摘要:1.ASP时代的HTTP请求处理过程 在IIS的应用程序映射中,IIS会将对asp和asa文件的请求转交给asp.dll这个ISAPI来处理 Inetinfo.exe进程,即www服务进程 解释型处理,每次请求都会重新解释一次,不适用于大流量请求 2.ASP.NET的HTTP请求处理过程 3.在HttpRuntime中请求处理过程 HttpRequest请求: 进入HttpRumtim...
阅读全文
摘要:事实上,JIT编译器分成两种(经济编译器和普通编译器),而且它们生来也不是平等的。经济JIT编译器代表了运行一个.NET应用程序所需要的最少功能,它直接用对等的本机代码取代每一条MSIL指令,不进行任何优化从而也带来更少的系统负载。这也意味着它主要应用在内存等资源比较紧张的平台上。 另一方面,普通JIT编译器则是缺省的运行时配置,它会对其产生的代码进行即时优化。这样做无形中给予了...
阅读全文
摘要:反射工厂是.NET独有的,因为它基于反射机制,可以用来简化工厂类。 public static object CreateByReflection(string strType) { Type t = Type.GetType(strType); ConstructorInfo ci = t.GetConstructo...
阅读全文
摘要:这个模式是对简单工厂的更高层次上的抽象,UML图如下: public abstract class AbstractFactory { public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB(); ...
阅读全文
摘要:工厂方法模式,就是使一个类的实例化延迟到子类——惰性声明 UML图如下: public class Production { } public abstract class Creator { public abstract Production FactoryMathod(); } public class ConcreteCrea...
阅读全文
摘要:11.1 字符 Char,16位Unicode代码值 两个常量字段,Char.MinValue:定义为'\0';Char.MaxValue:定义为'\uffff'; Char.GetUnicodeCategory()方法,返回字符类型(货币/标点/数学符号等等) Char与Int32的相互转型: 11.2 字符串...
阅读全文
摘要:是时候研究IL方面的程序了,太多这方面的技术点需要总结。准备写一个系列,关于IL的全部。 先总结一下,看完老瓦的Video后的一些心得笔记: Opcode指令集 IL代码: 1.directive声明,以.开头 2.instruction声明,不以.开头 3.entrypoint 程序入口 4.ansi,与非托管代码交互式,标记字符集 5.auto,自...
阅读全文