美文网首页
【设计模式】策略模式

【设计模式】策略模式

作者: lndyzwdxhs | 来源:发表于2017-10-31 18:30 被阅读16次

0x01 意图

定义算法家族,分别封装起来,让他们之前可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。

0x02 适用场景

UML类图

实例:商场打折案例

0x03 代码

# coding:utf-8

import os
import json

################## 商场收费接口类 ##################
class Cash(object):
    def __init__(self):
        pass
    def get_result(self, a):
        pass

################## 商场收费具体类 ##################
class DazheStrategy(Cash):
    def get_result(self, a):
        return a*0.8
        
class ManjianStrategy(Cash):
    def get_result(self, a):
        return a-50


################## 客户端代码-1 ##################
## Context类
class CashContext(object):
    def __init__(self, s_obj):
        self.straer = s_obj
        
    def get_resume_money(self, money):
        return self.straer.get_result(money)
        
stra_dict = {
    'dazhe' : DazheStrategy,
    'manjian' : ManjianStrategy,
}

rel_obj1 = CashContext(stra_dict['dazhe']())
rel_obj2 = CashContext(stra_dict['manjian']())

print rel_obj1.get_resume_money(200)
print rel_obj2.get_resume_money(200)

################## 客户端代码-2 ##################
## Factory类
class Factory(object):
    def __init__(self, type):
        self.dict_s = {
            'dazhe' : DazheStrategy,
            'manjian' : ManjianStrategy,
        }
        self.obj = self.dict_s[type]()
        
    def get_obj(self):
        return self.obj
        
rel_obj1 = Factory('dazhe').get_obj()
rel_obj2 = Factory('manjian').get_obj()
    
print rel_obj1.get_result(200)
print rel_obj2.get_result(200)



欢迎关注微信公众号(coder0x00)或扫描下方二维码关注,我们将持续搜寻程序员必备基础技能包提供给大家。


相关文章

网友评论

      本文标题:【设计模式】策略模式

      本文链接:https://www.haomeiwen.com/subject/gjtipxtx.html