Python10天冲刺-设计模型之策略模式

部署运行你感兴趣的模型镜像

策略模式是一种行为设计模式,它允许你在运行时动态地改变对象的行为。这种模式的核心思想是将一组相关的算法封装在一起,并让它们相互替换。

下面是使用 Python 实现策略模式的一个示例:

示例代码

假设我们有一个简单的购物车系统,其中不同的支付方式有不同的折扣策略。我们将使用策略模式来实现这一功能。

1. 定义抽象基类(策略接口)
from abc import ABC, abstractmethod

class PaymentStrategy(ABC):
    @abstractmethod
    def pay(self, amount):
        pass
2. 具体策略实现
class CreditCardPayment(PaymentStrategy):
    def pay(self, amount):
        print(f"Paying ${amount} with credit card.")
        return f"${amount} paid using credit card."

class PayPalPayment(PaymentStrategy):
    def pay(self, amount):
        print(f"Paying ${amount} with PayPal.")
        return f"${amount} paid using PayPal."
3. 上下文类

上下文类负责使用具体的策略来进行支付。

class ShoppingCart:
    def __init__(self, payment_strategy: PaymentStrategy):
        self._items = []
        self.payment_strategy = payment_strategy

    def add_item(self, item):
        self._items.append(item)

    def calculate_total(self):
        return sum(item['price'] for item in self._items)

    def checkout(self):
        total_amount = self.calculate_total()
        return self.payment_strategy.pay(total_amount)
4. 测试策略模式
if __name__ == "__main__":
    cart = ShoppingCart(CreditCardPayment())
    cart.add_item({'name': 'Shirt', 'price': 20})
    cart.add_item({'name': 'Pants', 'price': 30})

    print(cart.checkout())

    cart = ShoppingCart(PayPalPayment())
    cart.add_item({'name': 'Shoes', 'price': 50})
    cart.add_item({'name': 'Hat', 'price': 15})

    print(cart.checkout())

解释

  1. 抽象基类(策略接口)

    • PaymentStrategy 类定义了一个抽象方法 pay,这是所有具体策略必须实现的方法。
  2. 具体策略实现

    • CreditCardPaymentPayPalPayment 分别实现了 pay 方法,提供了不同的支付逻辑。
  3. 上下文类

    • ShoppingCart 类持有一个 payment_strategy 属性,用于存放具体的支付策略。
    • checkout 方法计算总金额并调用当前策略的 pay 方法。
  4. 测试策略模式

    • 创建两个 ShoppingCart 对象,分别使用 CreditCardPaymentPayPalPayment 策略。
    • 添加商品并结算,观察不同支付策略的结果。

通过这种方式,你可以灵活地切换不同的支付策略,而无需修改上下文类的代码。这就是策略模式的主要优点之一。


完整可运行的代码库

from abc import ABC, abstractmethod

# 抽象基类(策略接口)
class PaymentStrategy(ABC):
    @abstractmethod
    def pay(self, amount):
        pass

# 具体策略实现
class CreditCardPayment(PaymentStrategy):
    def pay(self, amount):
        print(f"Paying {amount} using credit card.")
        return f"{amount} paid using credit card."

class PayPalPayment(PaymentStrategy):
    def pay(self, amount):
        print(f"Paying {amount} using PayPal.")
        return f"{amount} paid using PayPal."

# 上下文类
class ShoppingCart:
    def __init__(self, payment_strategy: PaymentStrategy):
        self.items = []
        self.payment_strategy = payment_strategy

    def add_item(self, item):
        self.items.append(item)

    def remove_item(self, item):
        self.items.remove(item)

    def calculate_total(self):
        return sum(item['price'] for item in self.items)

    def checkout(self):
        total_amount = self.calculate_total()
        return self.payment_strategy.pay(total_amount)

if __name__ == "__main__":
    cart = ShoppingCart(CreditCardPayment())
    cart.add_item({'name': 'Shirt', 'price': 20})
    cart.add_item({'name': 'Pants', 'price': 30})

    print(cart.checkout())

    cart = ShoppingCart(PayPalPayment())
    cart.add_item({'name': 'Shoes', 'price': 50})
    cart.add_item({'name': 'Hat', 'price': 15})

    print(cart.checkout())```

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮用户制定一个从零开始学习Python和Java的详细计划,并提供资源推荐。首先,用户之前已经询问过关于选择编程语言的问题,我给了他们对比分析,现在他们明确要同时学Python和Java,所以需要更具体的指导。 用户的需求是从零开始,所以必须从基础讲起,分阶段安排。用户可能没有编程经验,所以计划要循序渐进,避免让他们感到压力过大。同时,用户需要详细的资源推荐和学习路径,这可能包括书籍、在线课程、练习平台等。 首先,我应该考虑如何合理安排学习顺序。Python和Java虽然都是编程语言,但语法和用途不同。Python更易上手,适合初学者建立编程思维,而Java的面向对象和严谨性对打基础也有帮助。可能需要建议先学Python基础,再转Java,或者交替学习,但需要避免混淆。 接下来,分阶段设计。比如,第一阶段打好Python基础,第二阶段学习Java基础,然后逐步深入各自的进阶内容。同时要强调项目实践,因为实习需要动手能力。每个阶段都需要明确的学习目标、时间安排和资源推荐。 资源方面,需要选择适合初学者的资源。Python推荐官方文档、《Python Crash Course》和Codecademy的课程。Java方面,推荐《Head First Java》和MOOC课程。同时,练习平台如LeetCode和Codewars对巩固基础很重要。 还需要考虑项目实践。用户之前提到过实习需要项目经验,所以每个阶段结束时都应该有小项目,比如Python的爬虫、数据分析,Java的Web应用等。GitHub的使用也很重要,指导用户如何展示项目。 另外,用户可能需要学习工具和环境配置,比如安装Python、Java JDK、IDE(PyCharm、IntelliJ IDEA),以及版本控制工具Git。这些也应该包含在计划中,可能作为预备阶段的内容。 还要注意时间安排,用户可能需要一个大概的时间线,比如每周投入多少小时,每个阶段持续多久。例如,Python基础4周,Java基础6周,这样用户能有清晰的进度概念。 最后,复合技能和持续学习的建议也很重要,比如学习数据结构与算法、数据库、框架等。同时,推荐参与开源项目和社区,帮助用户拓展网络和获取最新资讯。 需要确保回答结构清晰,分点列出,资源部分给出链接或具体名称,计划要详细但不过于复杂,让用户容易跟随。同时提醒用户避免同时学两门语言可能带来的混淆,建议打好一门基础后再学另一门,但用户明确要同时学,所以需要合理安排避免冲突。</think>我将为你设计一个从零开始同时学习Python+Java的 **6个月详细学习计划**,包含 **每日学习路径**、**必学知识点清单** 和 **精选资源导航**。以下是分阶段实施方案: --- ### **一、预备阶段(1周)** **目标**:搭建开发环境 + 理解基础概念 1. **工具准备**: - Python环境:安装Anaconda(含Jupyter Notebook) - Java环境:安装JDK17 + IntelliJ IDEA(社区版) - 通用工具:Git + GitHub账号 + VS Code 2. **基础认知**: - 理解`变量/数据类型/运算符`的通用概念 - 掌握`命令行操作`(Windows: PowerShell,Mac/Linux: Terminal) - 学习使用[菜鸟教程](https://www.runoob.com/)的代码在线编辑器 --- ### **二、Python基础阶段(第2-5周)** **学习路径**: ```python # Python核心语法结构 条件判断 → 循环结构 → 函数定义 → 面向对象 → 异常处理 ``` 1. **必学内容**: - 数据结构:列表推导式(如 `[x**2 for x in range(10)]`) - 文件操作:`with open() as f`上下文管理 - 模块使用:`datetime`, `json`, `os`标准库 2. **实践项目**: - 豆瓣电影TOP250数据爬取(使用`requests`+`BeautifulSoup`) - 学生成绩管理系统(控制台版本) 3. **推荐资源**: - 书籍:《Python Crash Course》([电子版](https://ehmatthes.github.io/pcc/)) - 视频:[廖雪峰Python教程](https://www.liaoxuefeng.com/wiki/1016959663602400) - 练习平台:[Codecademy Python](https://www.codecademy.com/learn/learn-python-3) --- ### **三、Java基础阶段(第6-10周)** **学习路径**: ```java // Java核心语法结构 类与对象 → 继承与多态 → 接口与抽象类 → 集合框架 → 泛型 ``` 1. **必学内容**: - JVM内存模型:栈/堆/方法区的关系 - 异常处理:`try-with-resources`语法 - 集合框架:`ArrayList` vs `LinkedList`性能对比 2. **实践项目**: - 银行账户管理系统(使用`Scanner`+`File`) - 多线程下载器(`ExecutorService`实现) 3. **推荐资源**: - 书籍:《Head First Java(第三版)》 - 视频:[浙江大学Java MOOC](https://www.icourse163.org/course/ZJU-1001541001) - 练习平台:[CodingBat Java](https://codingbat.com/java) --- ### **四、双语言进阶阶段(第11-16周)** **Python与Java并行学习框架**: ```                 Python                     Java                ───────                   ─────── 数据库       SQLAlchemy             JDBC + MyBatis Web开发      Flask/Django          Spring Boot 并发编程      asyncio               CompletableFuture ``` 1. **重点突破**: - Python- 掌握装饰器(如`@staticmethod`) - 理解GIL锁对多线程的影响 - Java: - 掌握Lambda表达式 - 理解JVM垃圾回收机制 2. **实战项目**: - Python:Django搭建博客系统(含REST API) - Java:Spring Boot实现电商后台 3. **资源整合**: - [Python官方文档](https://docs.python.org/3/) - [Java官方教程](https://docs.oracle.com/javase/tutorial/) --- ### **五、项目冲刺阶段(第17-24周)** **复合型项目开发**: 1. **全栈项目**: - 前端:HTML/CSS + Vue.js - 后端:Python Flask + Java Spring Boot混合架构 - 部署:Docker容器化 + Nginx负载均衡 2. **开源贡献**: - 参与Apache开源项目(如[Apache Commons](https://commons.apache.org/)) - 在GitHub发布个人工具库(至少200星标) 3. **简历准备**: - 技术栈描述模板: $$ \text{技术栈} = \begin{cases} \text{Python: Flask/Django/Scrapy} \\ \text{Java: Spring Cloud/MyBatis} \end{cases} $$ --- ### **六、学习效率工具包** 1. **知识管理**: - 笔记工具:Obsidian(使用双向链接整理知识点) - 代码片段:Gist保存常用代码模板 2. **社区支持**: - 问答平台:[Stack Overflow](https://stackoverflow.com/) - 中文论坛:[V2EX](https://www.v2ex.com/)技术节点 3. **求职辅助**: - 算法刷题:[LeetCode](https://leetcode.cn/)(按企业高频题排序) - 模拟面试:[Pramp](https://www.pramp.com/)(免费技术面试练习) --- **关键提示**:建议采用 **3:2时间分配法**(Python学习3,Java学习2循环),每周保证20小时有效编码时间。遇到难点时,优先在[知乎专题](https://www.zhihu.com/search?type=content&q=python%20java)查找深度解析。坚持6个月后,可达到 **中级开发实习生** 的竞争力水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值