让我们假设有一个简单的整数计算器,它只支持加法和乘法运算。它将接收一个整数生成器和一个整数作为其输入参数的加性或乘数,并对来自生成器的每个元素应用相应的计算。
我认为下面的粗略序列图恰当地描述了这个逻辑。

但是,当我使用goroutines和通道来实现相同的逻辑时,直接的方法/函数调用关系就消失了,因为goroutines利用通道来发送和接收数据。
generator := func(integers ...int) <-chan int {
intStream := make(chan int)
go func() {
defer close(intStream)
for _, i := range integers {
intStream <- i
}
}()
return intStream
}
multiply := func(intStream <-chan int, multiplier int) <-chan int {
multipliedStream := make(chan int)
go func() {
defer close(multipliedStream)
for i := range intStream {
multipliedStream <- i*multiplier
}
}()
return multipliedStream
}
add := func(intStream <-chan int, additive int) <-chan int {
addedStream := make(chan int)
go func() {
defer close(addedStream)
for i := range intStream {
addedStream <- i+additive
}
}()
return addedStream
}
intStream := generator(1, 2, 3, 4)
pipeline := multiply(add(intStream, 1), 2)
for v := range pipeline {
fmt.Println(v)
}在generator中生成的goroutine充当发送整数的生产者;在add和multiply中生成的goroutine既是生产者,也是消费者;它们接收整数,处理它们,并将它们放入新的通道。最后,两条通道将这3条通道连接成一条管道,但我不知道如何将其呈现得一目了然。
有一种面向大猩猩的UML图吗?
发布于 2022-04-12 11:56:54
在这个领域,没有一刀切的东西。这取决于您希望在设计中将重点放在何处:
Not related__:使用UML图可视化地记录低级代码,或者进行某种可视化编程是完全有效的,但是往往会创建非常复杂的图表,更难阅读代码。这可能不是最好的目的。
https://stackoverflow.com/questions/71841250
复制相似问题