Python设计模式

第一章: 设计模式基础

第二章: 常用设计模式

首页 > Python设计模式 > 第二章: 常用设计模式 > 2.5节: 策略模式

2.5节: 策略模式

薯条老师 2021-10-02 15:17:26 210603 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

2.5.1 策略模式

策略模式定义了一个算法簇,该算法簇中的策略要能够互相替换。关于策略模式的角色构成和局限性,可参考源码实现中的代码注释。

2.5.2 适用场景

当为达成某目标可通过多种策略来实现时,就可以使用策略模式。例如网店促销使用打折,满减,包邮等策略,实现财务自由可通过投资 ,创业等策略。

2.5.3 源码实现

策略模式:

# __author__ = 薯条老师,微信公众号:薯条编程

"""
策略模式定义了一个算法簇,算法簇中的算法要能够互相替换。
策略模式的三种角色:
上下文角色(Context):用来操作策略的上下文环境,屏蔽客户端对策略/算法的直接访问,封装可能存在的变化
抽象策略角色(Strategy):定义策略或算法的抽象接口;
具体策略角色(ConcreteStrategy)负责实现具体的策略或算法
"""
import abc

"""
(1) 定义一个表示软件项目的抽象基类SoftwareProject
"""
class Software(abc.ABC):
    @abc.abstractmethod
    def develop(self):
        """ """
        
        
"""
(2) 开发软件项目,可通过Python,Java,PHP等编程语言实现。
这里的编程语言使用方式即为策略
"""
class PythonSoftware(Software):
    def develop(self):
        print("we  can develop this project with python")
        
        
class JavaSoftware(Software):
    def develop(self):
        print("we  can develop this project with java")
        
        
class PHPSoftware(Software):
    def develop(self):
        print("we  can develop this project with php")
        
        
"""
(3) 定义一个表示软件项目研发组的上下文类SoftwareProjectTeam 
"""
class SoftwareProjectTeam:
    def __init__(self, develop_strategy):
        self.__develop_strategy = develop_strategy
        
    def build_software(self):
        self.__develop_strategy.develop()
        
    @property
    def develop_strategy(self):
        return self.__develop_strategy
        
    @develop_strategy.setter
    def develop_strategy(self, develop_strategy):
        self.__develop_strategy = develop_strategy
        
        
"""
(4) 从以上代码可看出,每一种具体的策略都要定义一个子类,这样会带来策略子类过多的问题。
我们在开发程序的过程中应避免过度设计,有时不使用策略模式,只使用条件判断反而会好一些。
"""


if __name__ == "__main__":
    """
    (5)  策略类对于客户端来说是不透明的,因为客户端需要指定具体的策略类,可通过工厂
    模式来隔离对象的创建和使用。
    """
    # 项目组首先定义的策略是通过Python来开发
    software_project = SoftwareProjectTeam(PythonSoftware())
    software_project.build_software()
    # 项目组脑子突然进水,临时变为使用PHP的开发策略,幸好有策略模式,替换无碍
    software_project.develop_strategy = PHPSoftware()
    software_project.build_software()

2.5.4 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:



欢迎 发表评论: