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。或者是吗? 感谢。
答案 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的回答。
你需要考虑为什么你可能有抽象类 - 这通常是因为你想“编程到一个界面”来拼写一个短语。
或许db
和limits
是两回事 - 想想单一责任......
abstract class db {
// returns db handle
}
abstract class limits {
// does something
}
class otherclass : extends limits, db {
}
...编辑开始...
显然,对于某些特定的OO语言,如Java和C#limits
和db
,需要interface
而不是类。 OP没有指定语言
...编辑结束...
考虑使用代码 - 考虑编写一些单元测试来查看它的外观。想想必须一起改变什么以及什么应该解耦。