【问题标题】:What is this OOP Concept Called?这个 OOP 概念叫什么?
【发布时间】:2011-06-18 05:15:22
【问题描述】:

谁能给我以下 OOP 概念的名称(如果它确实是一个 OOP 概念!):

我有两个类:A 和 B。两者都有说,每个 2 个方法(都不同)。现在我创建第三个类 C。现在我想将 A & B 的所有方法公开给 C。下面是某种演示:

class A
    int method_in_A_one() {
    }

    int method_in_A_two() {
    }
end

class B
    int method_in_B_one() {
    }

    int method_in_B_two() {
    }
end

class C
    C() {
        A an_instance_of_a;
        B an_instance_of_b;
    }
}

Now I want to be able to do this:

C instance_of_c = new C;

insance_of_c.method_in_A_one();
insance_of_c.method_in_A_two();
insance_of_c.method_in_B_one();
insance_of_c.method_in_B_two();

我还没有真正使用它,但我确信有一个特定的概念来处理它。在此先感谢,呃。

【问题讨论】:

  • 我猜你的意思是 B an_instance_of_b;而不是 B an_instance_of_c; ?
  • 是的,对不起,我现在改正,谢谢:)

标签: oop terminology


【解决方案1】:

所以这里发生了一些事情。您的 C 类型是由 A 和 B 类型的组合创建的,这是子类化的常见替代方法。

如果 C 的目的是提供一个更简单的接口来处理 A 和 B,那将是 facade 模式的一个示例。

如果 C 为其包装的对象提供了额外的功能(例如,通过实现 method_in_A_one 在包装对象上调用它之前做一些额外的工作),这将是 decorator 模式的一个示例。

如果 C 将 A/B 中的概念转换为另一个库所期望的形式(例如:将 C++ std::map 包装在 NSDictionary 子类中以在 Cocoa 中使用),那将是 适配器模式。

【讨论】:

  • 对潜在模式和组合的很好解释!
【解决方案2】:

听起来像是多重继承,或者是一个通用接口。但与您将 A 和 B 都封装在 C 中而不将任何一个作为基类公开的情况不同。

【讨论】:

    【解决方案3】:

    这是关于object compositiondelegation

    • 对象组合是指您的类由其他类组合(在示例中 - CAB 组合)
    • 委托是指所属类中有一个方法委托组合类的方法

    在我所知道的语言中,委托是手动实现的——您必须在 C 中声明方法并调用底层对象的相应方法。

    请注意,还有另一个选项可以实现这一点 - 多重继承,尽管您的示例并未完全显示这一点。这意味着C 既是A 又是B。不过,有些语言禁止这样做,并且对象组合被认为是一种更好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-13
      • 2021-04-15
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多