# coding=utf8
__author__ = 'smilezjw'
class CashSuper(object):
def accept_cash(self, money):
pass
class CashNormal(CashSuper):
def accept_cash(self, money):
return money
class CashRebate(CashSuper):
discount = 1
def __init__(self, discount):
self.discount = discount
def accept_cash(self, money):
return money * self.discount
class CashReturn(CashSuper):
total = 0
ret = 0
def __init__(self, total, ret):
self.total = total
self.ret = ret
def accept_cash(self, money):
if money > self.total:
return money - self.ret
return money
class CashContext(object):
cs = None
def __init__(self, type):
if type == 1:
cs0 = CashNormal()
self.cs = cs0
elif type == 2:
cs1 = CashReturn(300, 100)
self.cs = cs1
elif type == 3:
cs2 = CashRebate(0.8)
self.cs = cs2
def get_result(self, money):
return self.cs.accept_cash(money)
if __name__ == '__main__':
money = input('Total momey: ')
type = input('1-正常收费, 2-满300减100, 3-打8折: ')
context = CashContext(type)
print context.get_result(money)
策略模式和简单工厂模式相结合。
模式特点:策略模式使得客户端只需要认识一个类CashContext即可,而采用简单工厂模式则需要认识两个类CashSuper和CashFactory。策略模式使得耦合度降低。