策略模式

什么是策略模式?

指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。

关键字:同一行为、不同场景、不同实现方式

稳定与变化 : 交个人所得税(稳定)、不同国家税不一样(变化)。让变化的部分去依赖稳定的部分,使变化的部分稳定下来

 

UML图:

 

 

策略模式符合面向对象设计原则中的哪个原则?
开闭原则:对扩展开放,对修改关闭。

如在交个人所得税这实例中,不同国家对个人所得税算法不一样。策略模式对个人所得税算法进行了抽象化实现,
不同国家可继承个人所得税算法抽象类对算法具体化实现,而这种抽象化的具体化现就形成了对针对不同国家的税法扩展。

 

实例

from abc import abstractmethod, ABC


class City(ABC):
    @abstractmethod
    def arithmetic(self, money) -> int:
        pass


class China(Tax):
    # 中国 20%个人所得税
    def arithmetic(self, money) -> int:
        return money * 0.2


class USA(Tax):
    # 美国 14%个人所得税
    def arithmetic(self, money) -> int:
        return money * 0.14


class Person:
    def __init__(self, city: City, money: int):
        self.city = city
        self.money = money

    def tax(self):
        return self.city.arithmetic(self.money)


# 小明 中国 所交个人所得税
xiaomin = Person(China(),2000)  

# 小红 美国 所交个人所得税
xiaohong = Person(USA(),2000)

print(xiaomin.tax())
print(xiaohong.tax())

 

你可能感兴趣的:(策略模式)