我对使用垂直继承或组合进行简单的OOP实现有了第二个想法。我已经阅读了很多,但我仍然不好下定决心。 ^^
我需要制作四种不同的报告:报价,发票,目录和手册: - 每个报告都有相同的页眉和页脚。 - 报价和发票包含具有不同数据的相同格式表。 - 宣传册和目录与其他报告的结构不同,没有表格。
我想在这里提出OOP设计方面的帮助;我将介绍我的两个想法(伪代码),但任何反馈将不胜感激。 :)
继承后
class Report
{
method Header()
{
// Print the header
}
method Footer()
{
// Print the footer
}
}
class ReportTable
{
method Table()
{
// Print the table
}
}
class Quote extends ReportTable
{
method BuildReport()
{
call Header()
call Table()
// Print some more quote stuff
call Footer()
}
}
class Invoice extends ReportTable
{
method BuildReport()
{
call Header()
call Table()
// Print some more invoice stuff
call Footer()
}
}
class Catalogue extends Report
{
method BuildReport()
{
call Header()
// Print catalogue stuff
call Footer()
}
}
class Brochure extends Report
{
method BuildReport()
{
call Header()
// Print brochure stuff
call Footer()
}
}
关于表格功能的撰写
class Report
{
method Header()
{
// Print the header
}
method Footer()
{
// Print the footer
}
}
class Table
{
method Table()
{
// Print the table
}
}
class Quote extends Report
{
property table
constructor Quote( Table table )
{
self.table = table
}
method BuildReport()
{
call Header()
call self.table.Table()
// Print some more quote stuff
call Footer()
}
}
class Invoice extends Report
{
property table
constructor Invoice( Table table )
{
self.table = table
}
method BuildReport()
{
call Header()
call self.table.Table()
// Print some more invoice stuff
call Footer()
}
}
class Catalogue extends Report
{
method BuildReport()
{
call Header()
// Print catalogue stuff
call Footer()
}
}
class Brochure extends Report
{
method BuildReport()
{
call Header()
// Print brochure stuff
call Footer()
}
}
非常感谢! :)
答案 0 :(得分:1)
这可能是一个宗教问题。无论哪种方式都应该工作,并且很容易从一个到另一个重构。标准逻辑说有利于构成而不是继承,但要采取正确的做法。