查看: 1091|回复: 1
打印 上一主题 下一主题

【设计模式玩pyBoard】2.策略模式

[复制链接] qrcode

25

主题

29

帖子

85

积分

注册会员

Rank: 2

积分
85
楼主
跳转到指定楼层
发表于 2016-6-1 09:36 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    策略模式:制定各种预案,封装不同的算法,提供相同的接口,根据条件来自动选择使用哪种预案。
    代码:
  1. import pyb

  2. class IntensityX:
  3.         def Intensity(self, value):
  4.                 return 0

  5. class IntensityValue(IntensityX):
  6.         def Intensity(self, vaule):
  7.                 return vaule

  8. class IntensityPercent(IntensityX):
  9.         pc = 0
  10.         def __init__(self, percent):
  11.                 self.pc = percent
  12.         def Intensity(self, value):
  13.                 return int(value * self.pc)
  14.                
  15. class IntensityCut(IntensityX):
  16.         top = 0
  17.         cut = 0
  18.         def __init__(self, t, c):
  19.                 self.top = t
  20.                 self.cut = c
  21.         def Intensity(self, value):
  22.                 if (value >= self.top):
  23.                         return value - self.cut
  24.                 else:
  25.                         return value

  26. class IntensityLED:
  27.         def __init__(self, intensityX):
  28.                 self.super = intensityX
  29.         def GetIntensity(self, value):
  30.                 return self.super.Intensity(value)

  31. if __name__ == "__main__":
  32.         Intensity = IntensityLED(IntensityValue())
  33.         pyb.LED(4).intensity(Intensity.GetIntensity(200))
  34.         pyb.delay(1000)
  35.         Intensity = IntensityLED(IntensityPercent(0.1))
  36.         pyb.LED(4).intensity(Intensity.GetIntensity(255))
  37.         pyb.delay(1000)
  38.         Intensity = IntensityLED(IntensityCut(255, 55))
  39.         pyb.LED(4).intensity(Intensity.GetIntensity(255))
复制代码

    提前制定好LED闪烁的频率的方案,按照给定的条件来决定是按照给定的值来执行还是百分比来执行,或者是达到某种条件来执行。
    其实比较典型的场景为收费和促销策略,可随意定制满减的条件。




回复

使用道具 举报

0

主题

66

帖子

14

积分

新手上路

Rank: 1

积分
14
沙发
发表于 2016-6-1 12:12 PM | 只看该作者
很好的思路。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表