【剖析设计模式】——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, 开始我的《设计模式》系列。