标签: composition

喜欢构成而不是继承?

为什么喜欢构图而不是继承呢?每种方法都有哪些权衡取舍?什么时候应该选择继承而不是作文?

language-agnostic oop inheritance composition aggregation

1538
推荐指数
23
解决办法
29万
查看次数

关联,聚合和组合有什么区别?

关联,聚合和组合有什么区别?请解释一下实施情况.

oop uml associations composition aggregation

361
推荐指数
18
解决办法
34万
查看次数

继承与构成的区别

组成和继承是一样的吗?如果我想实现组合模式,我该如何在Java中实现?

java oop inheritance composition

187
推荐指数
7
解决办法
21万
查看次数

React.js:将一个组件包装到另一个组件中

许多模板语言都有"slots"或"yield"语句,允许进行某种控制反转,将一个模板包装在另一个模板中.

Angular有"transclude"选项.

Rails有收益率声明.如果React.js有yield语句,它将如下所示:

var Wrapper = React.createClass({
  render: function() {
    return (
      <div className="wrapper">
        before
          <yield/>
        after
      </div>
    );
  }
});

var Main = React.createClass({
  render: function() {
    return (
      <Wrapper><h1>content</h1></Wrapper>
    );
  }
});
Run Code Online (Sandbox Code Playgroud)

期望的输出:

<div class="wrapper">
  before
    <h1>content</h1>
  after
</div>
Run Code Online (Sandbox Code Playgroud)

唉,React.js没有<yield/>.如何定义Wrapper组件以实现相同的输出?

javascript template-engine composition transclusion reactjs

169
推荐指数
3
解决办法
14万
查看次数

编排与编排

从组织内部的角度来看,服务编排和服务编排之间有什么区别.

soa composition service-composition

155
推荐指数
8
解决办法
7万
查看次数

Java中聚合和组合的实现差异

我知道聚合和组合之间的概念差异.有人可以通过示例告诉我它们之间Java的实现差异吗?

java composition relationship aggregation

98
推荐指数
5
解决办法
10万
查看次数

Haskell组合(.)与F#的管道前向运算符(|>)

在F#中,使用管道前向运算符|>非常常见.但是,在Haskell中,我只见过使用过的函数组合(.).我知道它们是相关的,但是有没有一种语言原因在Haskell中没有使用管道转发,还是其他什么?

f# haskell functional-programming composition

95
推荐指数
9
解决办法
2万
查看次数

Java - 接口实现中的方法名称冲突

如果我有两个接口,两者的用途完全不同,但是使用相同的方法签名,我如何在不强制编写一个为两个接口服务的单个方法并在方法中编写一些复杂逻辑的情况下创建一个类.检查正在进行调用的对象类型并调用正确代码的实现?

在C#中,这被称为显式接口实现所克服.Java中有没有相同的方法?

java interface multiple-inheritance composition

87
推荐指数
3
解决办法
4万
查看次数

具体示例显示monad在组合下没有关闭(带证据)?

众所周知,应用函子在组合下是封闭的,但是monad不是.但是,我一直难以找到一个具体的反例,表明monad并不总是构成.

这个答案给出[String -> a]了一个非monad的例子.在玩了一下之后,我直觉地相信它,但是这个答案只是说"加入无法实现"而没有给出任何理由.我想要更正式的东西.当然有很多类型的函数[String -> [String -> a]] -> [String -> a]; 必须表明任何这样的功能必然不符合monad法则.

任何例子(附带证据)都可以; 我不一定特别想要证明上述例子.

monads haskell proof composition

79
推荐指数
3
解决办法
4668
查看次数

Mixins vs scala中的成分

在java世界中(更确切地说,如果你没有多重继承/ mixins),经验法则很简单:"赞成对象组合而不是类继承".

如果你还考虑mixins,我想知道它是否/如何改变,特别是在scala中?
mixins被认为是多重继承的方式,还是更多的类组合?
是否还有一个"赞成对象组成超类组成"(或其他方式)指南?

当人们使用(或滥用)mixins时,我已经看到了一些例子,当对象组合也可以完成这项工作时,我并不总是确定哪一个更好.在我看来,你可以用它们实现非常相似的东西,但也有一些差异,一些例子:

  • 可见性 - 使用mixins,一切都成为公共API的一部分,而不是组合的情况.
  • 冗长 - 在大多数情况下,mixins不那么冗长,也更容易使用,但情况并非总是如此(例如,如果你也在复杂的层次结构中使用自我类型)

我知道简短的回答是"它取决于",但可能有一些典型的情况,当这个或那个更好.

到目前为止,我可以提出一些指导原则(假设我有两个特征A和B,A想要使用B中的一些方法):

  • 如果你想用B中的方法扩展A的API,那么就是mixins,否则就是组合.但是,如果我创建的类/实例不是公共API的一部分,它就无济于事.
  • 如果你想使用一些需要mixins的模式(例如Stackable Trait Pattern),那么这是一个简单的决定.
  • 如果你有循环依赖,那么mixins与self类型可以提供帮助.(我尽量避免这种情况,但这并不容易)
  • 如果你想要一些动态的,运行时决定如何组合然后对象组合.

在很多情况下,mixins似乎更容易(和/或更简洁),但我很确定它们也有一些陷阱,比如"神级"和其他两篇artima文章中描述的其他:第1 部分,第2部分(BTW it在我看来,大多数其他问题与scala不相关/不那么严重.

你有更多这样的提示吗?

scala composition mixins

77
推荐指数
2
解决办法
8391
查看次数