博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式
阅读量:7079 次
发布时间:2019-06-28

本文共 1239 字,大约阅读时间需要 4 分钟。

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。如何解决:将这些算法封装成一个一个的类,任意地替换。关键代码:实现同一个接口。应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

 

 

 

class Strategy(object):    """    策略    """    def Algorithmlnterface(self):        passclass ConcreteStrategyA(Strategy):    def Algorithmlnterface(self):        print("做飞机出行")class ConcreteStrategyB(Strategy):        def Algorithmlnterface(self):        print("坐高铁出行")class ConcreteStrategyC(object):        def Algorithmlnterface(self):        print("做自行车出行")class Context(object):    """docstring for Context"""    def __init__(self, arg):        self.arg = arg            def set_strategy(self, arg):        self.arg = arg    def Contextlnterface(self):        return self.arg.Algorithmlnterface()if __name__ == '__main__':        context = Context(ConcreteStrategyA())    context.Contextlnterface()    #换行的话    context.set_strategy(ConcreteStrategyN())    context.Contextlnterface()

 

转载地址:http://hvpml.baihongyu.com/

你可能感兴趣的文章
广源荣新B班20121225作业
查看>>
Linux根文件系统
查看>>
Nagios安装配置手册
查看>>
关于接入层交换机启用STP或是Loopback-detection
查看>>
简单理解Ajax原理
查看>>
Delphi XE2 之 FireMonkey 入门(18) - TLang(多语言切换的实现)
查看>>
学用 ASP.Net 之 System.DateTime 结构
查看>>
我的友情链接
查看>>
互联网枭雄点评之周鸿祎 - 不甘老去的互联网老兵
查看>>
PKI_IOS证书加密L2L ×××
查看>>
web基础
查看>>
Apache和Nginx的区别
查看>>
2017.5.23 MS Power BI workshop for partner
查看>>
翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 8 章:列表操作...
查看>>
Linux常用的系统监控shell脚本
查看>>
Android Studio中使用GreenDao
查看>>
Yii 框架之采用自带的jquery库实现ajax分页
查看>>
Web前端开发规范
查看>>
day14-磁盘管理df/du/fdisk/parted命令
查看>>
String类的常用方法
查看>>