C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

前两天从微软网站上将李建忠的设计模式webcasts下载下来了,听了一下,尽管刚开始觉得他说话有点KA,但他的讲座确实让我对面向对象有一个重新的认识!下面是我的一些总结,来自他讲座的PPT。

一、对象是什么

从三个层次上来理解:

1、从概念层面讲,对象是某种拥有责任的抽象(对象是一个拥有某种功能的东西)

2、从规格层面讲,对象是一系列可以被其它对象使用的公共接口(这个东西提供了使用它所拥有的功能的途径)

3、从语言实现层面来看,对象封装了代码与数据(行为与状态)

二、面向对象的设计原则

1、主要的三大原则

●针对接口编程,而不是针对实现编程(使程序在日后易于扩展)

客户端无需知道所使用对象的具体类型,只需要知道对象拥有客户端所期望的接口

●优先使用对象组合,而不是类继承

“继承”通常为“白箱复用”,“对象组合”通常为“黑箱复用”。类继承在某种程序上破坏了“封装性”,子类父类耦合度高;而对象组合则只需要被组合的对象拥有良好定义的接口,耦合度低

●封装变化点(将变化的与不变的进行分别封装,当变化的部分发生改变时,不变的部分不受影响)

使用封装来创建对象之间的分界层,设计者可以在分界层的一侧进行修改,而不会对另一侧产生影响,这样可以降低层次间的耦合度

2、其它更小的设计原则:

●单一职责原则(SRP)

一个类只能有一个可能引起它变化的原因(将其它与该类相关的可能会引起这个类发生变化的部分进行另外封装)

●开发封闭原则(OCP)(对程序进行扩展,而不是修改)

类模块应该是可扩展的,但是不可修改(对扩展开放,对修改封闭)

●Liskov替换原则(LSP)(接口与多态的使用)

子类必须可以替换它们的基类

●依赖倒置原则(DIP)(使用经常变化的逻辑不影响经常不发生变化的部分)

高层模块不应该依赖于低层模块,两者都应依赖于抽象

抽象不应该依赖于具体实现,具体实现应依赖于抽象

●接口隔离原则

不应该强迫客户程序依赖于它们不用的方法

你可能感兴趣的:(设计模式)