設計模式 行為型模式,策略模式(15)

2021-09-07 17:13:55 字數 1935 閱讀 4468

#

!/usr/bin/env python

#-*- coding:utf-8 -*-

__author__ = '

andy

''''

大話設計模式

設計模式——策略模式

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

'''#

現金收費抽象類

class

cashsuper(object):

defaccept_cash(self,money):

pass

#正常收費子類

class

cashnormal(cashsuper):

defaccept_cash(self,money):

return

money

#打折收費子類

class

cashrebate(cashsuper):

def__init__(self,discount=1):

self.discount =discount

defaccept_cash(self,money):

return money *self.discount

#返利收費子類

class

cashreturn(cashsuper):

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

self.money_condition =money_condition

self.money_return =money_return

defaccept_cash(self,money):

if money>=self.money_condition:

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

return

money

#具體策略類

class

context(object):

def__init__

(self,csuper):

self.csuper =csuper

defgetresult(self,money):

return

self.csuper.accept_cash(money)

if__name__ == '

__main__':

money = input("

原價: ")

strategy ={}

strategy[1] =context(cashnormal())

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

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

mode = input("

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

if mode in

strategy:

csuper =strategy[mode]

else

:

print

"不存在的折扣方式

"csuper = strategy[1]

print

"需要支付:

",csuper.getresult(money)

看以看到策略模式和工廠模式很像。但其實兩個的差別很微妙,工廠模式是直接建立具體的物件並用該物件去執行相應的動作。簡單工廠模式側重於生成物件。

而策略模式將這個操作給了context類,沒有建立具體的物件,實現的**的進一步封裝,客戶端**並不需要知道具體的實現過程。 策略模式中注重具體演算法的實現。

乙個建立型模式,乙個行為行模式。

設計模式 行為型模式 策略模式

電影票類 環境類 class movieticket 注入乙個折扣類物件 public void setdiscount discount discount public double getprice 折扣類 抽象策略類 inte ce discount 學生票折扣類 具體策略類 class st...

設計模式 行為型模式 策略模式

1.定義 定義了一組演算法並分別封裝,使彼此之間可以相互替換,該模式下演算法的變化不會影響到使用演算法的客戶端 3.涉及角色 1.抽象策略 該組演算法的最上層介面,定義了該組演算法需要實現的行為 2.具體策略 具體行為的實現者,是抽象策略的子類 3.策略上下文 持有抽象策略例項,遮蔽高層模組對具體策...

行為型模式 策略模式

策略 class salestrategy class strategya public salestrategy class strategyb public salestrategy 策略使用者 class salesman void yell salestrategy m strategy 呼...