大話設計模式Python實現 策略模式

2022-09-17 07:24:12 字數 2424 閱讀 6073

策略模式(strategy pattern):它定義了演算法家族,分別封裝起來,讓他們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶.

下面是乙個商場活動的實現

1

#!/usr/bin/env python2#

-*- coding:utf-8 -*-34

__author__ = '

andy'5

'''6

大話設計模式

7設計模式——策略模式

8策略模式(strategy):它定義了演算法家族,分別封裝起來,讓他們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶

9'''

1011

#現金收費抽象類

12class

cashsuper(object):

1314

defaccept_cash(self,money):

15pass16#

正常收費子類

17class

cashnormal(cashsuper):

1819

defaccept_cash(self,money):

20return

money

2122

#打折收費子類

23class

cashrebate(cashsuper):

2425

def__init__(self,discount=1):

26 self.discount =discount

2728

defaccept_cash(self,money):

29return money *self.discount

3031

#返利收費子類

32class

cashreturn(cashsuper):

3334

def__init__(self,money_condition=0,money_return=0):

35 self.money_condition =money_condition

36 self.money_return =money_return

3738

defaccept_cash(self,money):

39if money>=self.money_condition:

40return money - (money / self.money_condition) *self.money_return

41return

money

4243

#具體策略類

44class

context(object):

4546

def__init__

(self,csuper):

47 self.csuper =csuper

4849

defgetresult(self,money):

50return

self.csuper.accept_cash(money)

5152

5354

55if

__name__ == '

__main__':

56 money = input("

原價: ")

57 strategy ={}

58 strategy[1] =context(cashnormal())

59 strategy[2] = context(cashrebate(0.8))

60 strategy[3] = context(cashreturn(100,10))

61 mode = input("

選擇折扣方式: 1) 原價 2) 8折 3) 滿100減10: ")

62if mode in

strategy:

63 csuper =strategy[mode]

64else:65

print

"不存在的折扣方式

"66 csuper = strategy[1]

67print

"需要支付:

",csuper.getresult(money)

這幾個類的設計如下圖:

使用乙個策略類cashsuper定義需要的演算法的公共介面,定義三個具體策略類:cashnormal,cashrebate,cashreturn,繼承於cashsuper,定義乙個上下文管理類,接收乙個策略,並根據該策略得出結論,當需要更改策略時,只需要在例項的時候傳入不同的策略就可以,免去了修改類的麻煩

出處:

《大話設計模式》python實現 簡單工廠模式

基於python3.6實現 最近開始看 大話設計模式 由於平常用python,所以把 改寫了一下,也是心血來潮,不知道能不能更下去,慢慢來吧。簡單工廠模式 class operation object pass class opadd operation def getresult self ret...

大話設計模式Python實現 介面卡模式

介面卡模式 adapter pattern 將乙個類的介面轉換成為客戶希望的另外乙個介面.下面是乙個介面卡模式的demo 1 usr bin env python2 coding utf 8 34 author andy 5 6 大話設計模式 7設計模式 介面卡模式 8介面卡模式 adapter p...

大話設計模式策略模式c 實現

其他二十三種設計模式 include using namespace std 策略模式 strategy 定義演算法家族,分別封裝起來,讓演算法之間可以相互替換,且不會影響到使用演算法的client客戶 抽象收費策略 class cashsuper 正常收費類 class cashnormal pu...