注册 登录
Python设计模式

第一章: 设计模式基础

第二章: 常用设计模式

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

2.5节: 策略模式

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

编辑 收藏

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

薯条老师的线下Python小班办得很好,学员的平均就业薪资有11K。线下小班培训的课程有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小班培训的学员大部分都找到了很好的工作,平均月薪有11K,学得好的同学,拿到的会更高。由于是小班教学,所以薯条老师有精力把每位学员都教好。打算参加线下小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

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

扫码免费领取学习资料:



欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录