首页 > 代码库 > 策略模式
策略模式
模式说明
定义算法家族并且分别封装,它们之间可以相互替换而不影响客户端。
模式结构图
程序示例
说明:选择不同排序算法
代码:
class OrderStrategy(object): """sort base""" def Sort(self,*args): passclass Bubble(OrderStrategy): def Sort(self,args): args = list(args) length = len(args) for i in range(length): j = i + 1 while j < length : if args[i] > args[j]: args[i],args[j] = args[j],args[i] j = j + 1 print "Bubble:" print args return argsclass Insertion(OrderStrategy): def Sort(self,args): args = list(args) length = len(args) for i in range(1,length): temp = args[i] #for j in range(i,-1,-1):#range don‘t contain the stop element so the middl -1 means stop at 0 # if args[j - 1] > temp and j>0: # args[j] = args[j - 1] # else: # break j=i; while j>0: if args[j - 1] > temp: args[j] = args[j - 1] j=j-1; else: break args[j] = temp #asignment the current (position i) element to j(the first element less than it on the left side of i) print "Insertion:" print args return argsclass Selection(OrderStrategy): def Sort(self,args): #print args args = list(args) #print args length = len(args) smallValue = 0 smallLocation = 0 for i in range(0,length): #assume the smallest element and positon smallValue =http://www.mamicode.com/ args[i] smallLocation = i #find the truly smallest element and position for j in range(i + 1,length): if args[j] < smallValue: smallValue = args[j] smallLocation = j #exchange smallest element and current (position i) element args[i],args[smallLocation] = args[smallLocation],args[i] print "Selection:" print args return argsclass SortHandler(object): strategy = OrderStrategy() def SetStrategy(self,strategy): self.strategy = strategy def sort(self,args): self.strategy.Sort(args) sortList = (3,1,4,2,6)if __name__ == ‘__main__‘: handler = SortHandler() handler.SetStrategy(Selection()) handler.sort(sortList) handler.SetStrategy(Insertion()) handler.sort(sortList) handler.SetStrategy(Bubble()) handler.sort(sortList)
运行结果:
参考来源:
http://www.cnblogs.com/chenssy/p/3679190.html
http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html
http://www.cnblogs.com/wangjq/archive/2012/07/03/2570344.html
策略模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。