【问题标题】:Architecting common and unique behaviour in code在代码中构建常见和独特的行为
【发布时间】:2011-05-16 06:44:22
【问题描述】:

我正在设计一个实用程序来备份应用程序。

备份功能将包含要执行的常见任务(通用代码)和一些独特的步骤。我是否在正确的轨道上使用一个接口来处理独特的行为,并使用一个抽象基类来处理所有孩子的共同行为?这种方法有什么缺点吗?有更好的吗?

谢谢

【问题讨论】:

  • 您的问题是非常特定于语言的,而不是面向 OOP 设计的通用问题。看起来你假设的是 Java 或 C#(我猜到目前为止的答案都是假设的),但请说明

标签: oop


【解决方案1】:

如果基类实际上实现了某些行为,那么我认为它被称为-抽象基类。

无论如何我认为这叫做Template method pattern:你可能想在模式字典中查找它(它应该解释何时合适,并引用任何类似的替代模式)。

【讨论】:

    【解决方案2】:

    我不会使用抽象基类来共享通用功能,而只是表达 is-a 关系。如果 D 派生自 B,那么无论在哪里期望 B,都会出现 D。这是使用公共继承的标准。

    您可以使用私有继承,但在某些语言中您只能从一个类派生。

    这让我们认为应该是第一个 - 您应该考虑责任并封装它所属的任何功能,向客户端公开接口(或 C++ 中的纯抽象类),并在派生自的具体类中实现功能那些接口。

    【讨论】:

    • 本例中的 is-a 大概是 is-a-backup-strategy,或者,is-a-type-of-object-which-can-be-backed-up。
    • 我的观点是-“通用行为的抽象基类”=>您不会将抽象基类用于通用行为,而仅用于表达 is-a 关系。鸟和飞机的行为方式相同——它们会飞。你会创建一个名为 Flyer 的抽象基类,并使用一个名为 Fly() 的方法和一个默认实现吗?还是一个界面?
    • 很难想象一只鸟和一架飞机有什么“共同行为”;但是(例如)一架客机、一架私人螺旋桨飞机和一架直升机可能都由空中交通管制部门控制,所以,如果我正在设计一个 ATC 系统,那么这些可能都是一个公共基类的子类。
    • 它们是否都实现了相同的纯抽象接口,或者它们是否都继承了相同的非抽象基类,IMO 有点没有实际意义:一个实现细节。
    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    相关资源
    最近更新 更多