【剖析设计模式】——OO与设计原则

 

    OO有三大特性:封装性,多态性,继承性。

    设计原则有5种:

    1. 单一职责(SRP):一个类应该有且仅有一个引起变化的因素。

    2. 开放封闭(OCP):对扩展开放,对修改封闭。

    3. Liskov替换(LSP):子类可以替换为它的基类。

    4. 依赖倒置(DIP):高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

    5. 接口隔离(ISP):一个类对另外一个类的依赖建立在最小的接口上。

    那么, .NET提供了我们什么样的抽象能力呢?

  • Class: 提供了对现实世界的抽象。
  • Interface: 提供了对Class行为的抽象。
  • Delegate: 对方法的抽象。
  • Attribute: 对类型元数据的抽象。
  • Generics: 对上述因素进行n步抽象的机会。

    .NET常用武器:

  • 索引器。this[int index]
  • 迭代器。yield return xxx;
  • 多播委托与事件。multicastdelegate。+=, –=, add{} remove{},构造职责链。
  • 带返回值的委托。Predicate<T>, Func<T>。可以和linq组合起来很强大。
  • 不带返回值的委托。Action<T>。
  • 委托的异步调用。BeginInvoke(xxx), EndInvoke(xxx)
  • 可重载运算符。static DateTime operator ++ (DateTime dt)
  • 显式/隐式类型转换。static implicit/explicit operator ClassA(ClassB b)
  • 反射。Activator.CreateInstance<T>(), xx.GetType().GetProperty(“name”).GetValue(obj, index)
  • 泛型。<T>, where T: class, new
  • 标记类(属性)。[Serializable]
  • 扩展方法。static int ToInt32(this string s)
  • 匿名方法与Lambda表达式。xxList.Foreach((item)=>item.Save()));
  • LINQ。from a in b where a.ID == “1” orderby a.ID select a;
  • 匿名类型,对象、集合初始化器。var a = new {ID=1, Name=”prime”};
  • abstract, virtual, override关键字。主要用于修饰方法,写基类用到。
  • ref, out, params关键字。主要用于写参数。

    然后就是典型的23种设计模式。还有IOC,AOP等典型模式。

    OK, 开始我的《设计模式》系列。

posted @ 2009-06-15 23:16  primeli  阅读(384)  评论(1编辑  收藏  举报