0x01 意图
定义算法家族,分别封装起来,让他们之前可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
0x02 适用场景
![](https://img.haomeiwen.com/i5366157/bd6de839a3e899b4.png)
实例:商场打折案例
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)或扫描下方二维码关注,我们将持续搜寻程序员必备基础技能包提供给大家。
网友评论