我非常喜欢软件设计原则,例如SOLID和DRY。还有哪些面向对象的软件设计原则存在?
注意:我不是在寻找诸如“对您的代码进行评论”之类的答案,而是在寻找像Uncle Bob所讨论的面向对象设计原则。
注意:我不是在寻找诸如“对您的代码进行评论”之类的答案,而是在寻找像Uncle Bob所讨论的面向对象设计原则。
以下是维基百科上列出的一个相当全面的清单:
http://en.wikipedia.org/wiki/List_of_software_development_philosophies
选择组合而非继承是其中之一。
许多人,特别是那些刚接触面向对象编程的人,会在不必要的情况下开始扩展类,而实际上他们只需要使用组合即可。如果你问自己,“新的B类是A类吗?”如果不是,那么你就不应该去扩展它。
例如,假设我有一个Person
类和一个Car
类,我想创建一个名为DrivenCar
的新类。一个天真的实现方法是这样说的(让我们假装我们有多重继承):
class DrivenCar extends Person, Car { ... }
驾驶的汽车是人的一种吗?不是,所以不应该扩展人类。驾驶的汽车是汽车吗?是的,因此扩展是有意义的。
使用组合实现将如下所示:
class DrivenCar extends Car {
private Person driver;
}
接口。大多数设计模式都基于接口和实现的分离。
当你的API预计会增长时,使用抽象类而不是接口。在接口中添加新方法需要更改实现它的所有类。