不过真实的情况是上述所有这些针对软件设计原则展开讨论的资源都源自Robert Martin的工作Robert Martin并不是所有原则的发明者但是他的确是第一个把这些原则收集到一起的人下面列出这些软件设计原则
SRP—单一责任原则
OCP—开关原则
LSP—Liskov替换原则
ISP—接口隔离原则
DIP—依赖倒置原则
上述这个原则的集合正好对应于缩略词SOLID
下面的软件设计原则列表来自于《Head First Design Patterns》一书
封装变化
多用组合少用继承
基于接口而不是基于实现编程
在交互的对象间努力实现松耦合
类应该为了扩展而开放但是为了修改而关闭
依赖于抽象而不要依赖于具体类
仅仅对你的朋友交谈
不调用我我们会调用你
一个类应该仅有一个改变的理由
当然上述原则之间也存在许多的重叠之处例如单一责任原则与后面的一个类应该仅有一个改变的理由这一原则是相一致的然而它们所强调的重点还是有所不同更多的细节在此不便赘述
所有这些设计原则的真正动机在于努力构建出能够适应变化的软件上述原则分别对于不同的原则进行相应的阐述最终目的也不过是为了创建出可以经得起时间测试的软件
软件设计模式
软件设计模式描述的是应用软件设计原则所遵循的策略的问题换句话说一个软件设计原则是一个好的思想而一个软件设计模式是你用于实现这种好的思想的工具
软件设计模式的思想最初源于书籍《Design Patterns: Elements of Reusable ObjectOriented Software》正是这本书为其它许多描述软件设计模式书的创作带去灵感
例如另一本书《The Head First Design Pattern》就以一种更易于理解的方式向人们介绍了GOF所着的书(即上面的那本《Design Patterns: Elements of Reusable ObjectOriented Software》)中所引入的设计模式这本书中总共详细介绍了下列种软件设计模式
Strategy
Observer
Decorator
Factory
Singleton
Command
Adaptor
Façade
Template
Iterator
Composite
State
Proxy
Compound
另一本在软件设计模式方面较有影响的书是Martin Fowler的《Patterns of Enterprise Application Architecture》这本书还拥有一个公司网站其中列举了本书中所介绍的模式此网站的网址是http://wwwmartinfowlercom/eaaCatalog/
[] [] []