摘要: 静态字段与静态构造函数static 修饰成员的初始化总是先与实例成员,static成员与该类型相关与类型实例无关。静态字段类型中静态字段之间的实例化顺序是按代码中的书写顺序执行。静态字段先与本类静态构造函数执行;静态字段中使用到的其他类型的静态字段,则递归倒序从最底层实例化静态字段和调用静态构造函数。静态构造函数静态构造函数不能被任何修饰符修饰,并且整个生命周期只被调用一次。静态只读字段静态只读字段可以在两处被赋值,一次是静态字段本身初始化,另一次是在静态构造函数中修改值,此后永远不允许改变其值。Program.Entry.Code static void Main(string... 阅读全文
posted @ 2013-03-29 17:06 Lovey 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 当我们定义自己的类型时(无论是类还是Struct),应该为类型定义等同性的含义。C#定义了4中不同的函数来判断两个对象是否“相等”。1.public static bool ReferenceEquals(object left,objec right)2.public static bool Equals(object left,object right);3.public virtual bool Equals(object right);4.public static bool operator ==(MyClas left,MyClass right);对于前两种静态函数,我们永远都应 阅读全文
posted @ 2013-03-29 08:59 Lovey 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 引用炒股票与买基金来解释“外观模式”,为用户抽象出复杂业务调用过程,提供一个简单的对外统一调用“接口”。外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。子系统代码模拟:Facade.SubSystem.impl.Code 1 class SubSystemOne 2 { 3 public void MethodOne() 4 { 5 Console.WriteLine("子系统方法一。"); 6 } 7 } 8 ... 阅读全文
posted @ 2013-03-28 23:35 Lovey 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 迪米特原则(low ofDemeter)又称“最少知识原则”(LeastKnowledgePrinciple)迪米特法则(LoD),如果两个类不必彼此直接沟通,那么这两个类就不应当发生直接的相互作用。如果一个类需要调用另一个类的某个方法的话,可以通过第三者转发调用。迪米特法则首先强调的前提是在类的结构设计上,每一个类都应该降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的方法和字段不要公开。迪米特法则其根本思想,是强调类之间的松耦合。程序设计时,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对关系的类造成波及。 阅读全文
posted @ 2013-03-27 22:51 Lovey 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 模版方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变算法的结构即可重定义算法的特定步骤。菜鸟使用模版方法模拟学生做试卷:Pattern.Template Method.Code 1 namespace Pattern.TempleMethod.Newbie 2 { 3 ///学生试卷运用模版模式的实现 4 class TestPaper 5 { 6 public void TestQuestion1() 7 { 8 Console.WriteLine("屠龙刀的玄铁可能是:... 阅读全文
posted @ 2013-03-27 22:31 Lovey 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 原型模式(Prototype),用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象[DP]。“原型模式其实就是从一个对象再创建另外一个可定制的对象,而不需要知道任何创建的细节。”基础知识this.MemberwiseClone(),MSDN解释:创建对象的浅表副本。方法是创建一个新的对象,然后将该对象的非静态字段复制到该新对象。如果字段是值类型,则对字段执行逐位复制。如果对象是引用类型则复制引用而不复制引用的对象;因此原始对象和副本引用一个对象。在.NET在System命名空间提供了ICloneable接口,其中的唯一一个方法Clone()这样只需实现这个接口就可以完成原型模型了。 阅读全文
posted @ 2013-03-26 22:49 Lovey 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 简单工厂vs工厂方法简单工厂是第二章讲解的内容,它与工厂方法很相似。简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对客户来说去除了对具体产品的依赖。但是,每次要添加算法,都需要的在客户端怎加一个case分支条件,修改了原有的类,违反了开放-封闭原则。简单工厂模式复习:Pattern.Sample Factory.Code 1 namespace Pattern.FactoryMethod 2 { 3 //首先复习简单工厂 4 class OperationFactory 5 { 6 public stati... 阅读全文
posted @ 2013-03-26 17:59 Lovey 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 代理模式(Prexy)为其他对象提供一种代理以控制这个对象的访问[DP]。代理模式代码代码比较简单,但是应用场景难于理解。代理模式菜鸟设计应用:Proxy.Newbie.Code 1 namespace Pattern.Proxy.Newbie 2 { 3 interface IGiveGift 4 { 5 void GiveDolls(); 6 void GiveFlowers(); 7 void GiveChocolate(); 8 } 9 10 class Proxy : IGiveGift11 {1... 阅读全文
posted @ 2013-03-26 16:11 Lovey 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 装饰模式(Decorator),动态给一些对象添加额外的职责,就增加功能而言,装饰模式比声明子类更加灵活[DP]。装饰模式使用: 利用SetComponent来对对象进行包装的,这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中的[DEP]。装饰模式的原型实现:Pattern.Decorator.Prototype.Code 1 namespace Pattern.Decorator 2 { 3 abstract class Component 4 { 5 public abstract void... 阅读全文
posted @ 2013-03-26 14:11 Lovey 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 依赖倒转原则,A.高层模块不应该依赖低层模块,两者都应该依赖抽象。B.抽象不应该依赖细节,细节应该依赖抽象。(平常高层模块调用,低层已经开发好的函数库,但是比如,客户要求换了数据库的存储方式,依赖低层函数就不行了,如果我们依赖了抽象类或者借口,就不用怕了。)里氏替换原则(LSP),子类必须能够替换掉他们的父类[ASD]。里氏替换原则由Barbara Liskov女士在1988年发表;一个软件实体如果使用的是父类的话,那么一定适用于其子类,而且觉察不到父类对象与子类对象的差别。也就是说,在软件类面,把父类替换为子类,程序的行为没有发生变化。正是因为这个原则,使得继承复用成为可能。只有当子类可以替 阅读全文
posted @ 2013-03-26 13:39 Lovey 阅读(193) 评论(0) 推荐(0) 编辑