OOP设计继承的建议

时间:2014-10-01 08:51:29

标签: oop design-patterns

abstract class db{
    // return an handle to db
}

class type extends db{
    // code that uses db
}

abstract class limits extends db{
    // code that DOES NOT use db
}

class otherclass extends limits{
    // code that use db and limits
}

正如您所看到的,我需要在除限制之外的所有类中使用db。但限制是使用db的类的父级。 我认为这不是正确的设计模式,因为我将db扩展为限制只是为了让孩子们可以使用db。或者是吗? 感谢。

2 个答案:

答案 0 :(得分:5)

在这种情况下,根据未说明的要求,您最好使用组合而不是继承。

class db {
    // returns db handle
}

class type {
    private db; // type can now use db
}

class limits {
    // does something
}

class otherclass {
     private limits;
     private db;      // can use limits and db
}

答案 1 :(得分:1)

你说“我需要除了限制以外的所有类别的数据库。”表示你应该编写(或包含)不从中继承的数据库。请参阅md4的回答。

你需要考虑为什么你可能有抽象类 - 这通常是因为你想“编程到一个界面”来拼写一个短语。

或许dblimits是两回事 - 想想单一责任......

abstract class db {
    // returns db handle
}

abstract class limits {
    // does something
}

class otherclass : extends limits,  db {
}

...编辑开始...
显然,对于某些特定的OO语言,如Java和C#limitsdb,需要interface而不是类。 OP没有指定语言 ...编辑结束...

考虑使用代码 - 考虑编写一些单元测试来查看它的外观。想想必须一起改变什么以及什么应该解耦。