关于设计模式:golang-策略模式之排序算法策略

34次阅读

共计 934 个字符,预计需要花费 3 分钟才能阅读完成。

起源

最近在学设计模式,这个货色学起来,总是隐隐约约,看起来懂,又不知该利用到何处,咬着牙学完了之后,筹备学习算法,写了两个简略的排序算法,忽然灵光一闪,如果我想用不必的算法去排序的时候,齐全能够用策略模式,正好学以致用

示例

我先设计了一个排序接口

type sortAlgo interface {sort([]int)
}

而后,我写了两个算法,一个是冒泡排序,一个是简略抉择排序,都实现了这个接口

type bubbleSort struct {
}
func (b *bubbleSort) sort(data []int) {n := len(data)
    for i:=0; i<n-1; i++ {
    for j:=n-1; j>i; j-- {if data[j-1] > data[j] {tmp := data[j-1]
            data[j-1] = data[j]
            data[j] = tmp
       }
 } }}
 
 type simpleSelectSort struct {
}
func (s *simpleSelectSort) sort(data []int) {n := len(data)
   for i:=0; i<n; i++ {
      minIndex := i
      for j:=i+1; j<n; j++ {if data[j] < data[minIndex] {minIndex = j}
 } if minIndex != i {tmp := data[minIndex]
     data[minIndex] = data[i]
     data[i] = tmp
  }
 }}

最初,我构建一个策略模式,能够通过设计,决定应用哪一个算法

type sortStrategy struct {data []int
 sortAlgo
}
func (s *sortStrategy) setAlgo(sa sortAlgo) {s.sortAlgo = sa}
func (s *sortStrategy) setData(data []int) {s.data = data}
func (s *sortStrategy) run() {s.sortAlgo.sort(s.data)
}

总结

说实话,这么写有点 Java 了,然而我看的设计模式的书,就是基于 Java 的,先学习思维嘛
我脑海中,当初还蹦出来另一个思路,排序时,接管一个排序办法,再调用

type sortFunc func([]int)

这样是不是更 gopher 了呢

正文完
 0