去的抽象模式

时间:2018-03-05 13:44:25

标签: go interface abstraction

我有两个接口。它们几乎相同,唯一的区别是Set方法:

type Cache1 interface {
    Set(key, value interface{}, ttl time.Duration) bool
}

type Cache2 interface {
    Set(key, value interface{}) bool
}

知道如何将它们整合成一个抽象吗?当然我可以将ttl time.Duration添加到第二个界面,但它将无用,并会恶化代码可读性。如果存在复杂的模式,请你建议吗?

2 个答案:

答案 0 :(得分:2)

我想,在合并这些方法时你应该关注界面隔离原理。

从技术上讲,您可以通过将所有参数包装到SetRequest或其他内容来合并它们。 界面将是一种

type Cache interface {
    Set(request SetRequest) bool
}

答案 1 :(得分:0)

我想到的另一个机会是将界面合并为一个:

type Cache interface {
    Set(key, value interface{}, ttl time.Duration) bool
}

如有必要,请忽略方法签名中的冗余参数:

func (c *cache) Set(key, value interface{}, _ time.Duration) bool {