课后习题
为了满足使用自动饮水机泡茶、吃药、冲咖啡等需求,需要为饮水机设计四个按钮,通过按钮,设定饮水机自动出水温度分别为:40 度、60 度、90 度、100 度。请根据此需求设计合理的设计模式。
课程代码、课件及其他相关资料地址
https://gitee.com/wilsonyin/zero-basics-python
作者回复: 适配器模式(Adapter Pattern)和代理模式(Proxy Pattern)在表面上看起来确实有些相似,但它们的用途和实现方式有所不同。让我们来详细了解一下这两者的区别。 ### 1. 适配器模式 适配器模式的主要目的是使两个不兼容的接口能够一起工作。适配器充当两个不同对象之间的桥梁,将一个接口转换为另一个接口,使其能与另一个类一起工作。 #### 生活中的例子 想象一下,你从国外带回了一个电器,但是它的插头与你家里的插座不兼容。这时候,你就需要一个插头转换器来连接电器和插座。 #### 代码示例 假设有一个旧的系统使用以下接口: ```python class OldSystem: def old_request(self): return "Old System Request" ``` 新系统的接口如下: ```python class NewSystem: def request(self): return "New System Request" ``` 适配器可以这样实现: ```python class Adapter: def __init__(self, old_system): self.old_system = old_system def request(self): return self.old_system.old_request() ``` 通过适配器,我们可以让新系统使用旧系统的接口。 ### 2. 代理模式 代理模式的目的是为其他对象提供一种代理以控制对这个对象的访问。代理可以用于访问控制、日志记录、懒加载等。 #### 生活中的例子 想象一下你在购买演唱会的门票,但是不想亲自去售票窗口买票。这时候,你可以请朋友(代理)帮你买票。 #### 代码示例 ```python class RealSubject: def request(self): return "Real Subject Request" class Proxy: def __init__(self, real_subject): self.real_subject = real_subject def request(self): # 在访问真实主题之前可以做一些事情 print("Proxy: doing something before the real request...") return self.real_subject.request() ``` ### 区别 - **目的**:适配器是为了让两个不兼容的接口能够协同工作;代理是为了控制对原始对象的访问。 - **实现方式**:适配器通过转换一个接口为另一个接口实现兼容;代理通过提供与原始对象相同的接口,然后在需要的地方调用原始对象。 简而言之,适配器更关注如何连接不同的接口,而代理更关注如何控制对一个对象的访问。
作者回复: 哈哈哈哈,下次注意~
作者回复: 就目前来说,实现了主要的功能,非常棒。 你可以将程序保留,等接触更多的代码和有更丰富的经验时, 可以考虑将代码继续优化,比如多层级的继承,或继承共同的父类,利用这样的方式减少重复代码的编写。 当然了不能一口吃成胖子,一点一点学,接触更多的代码后,自然就会写复杂的设计模式和架构了
作者回复: 对,但不是这一讲关注的问题。 所谓设计模式是指在有依赖、继承关系的基础上,如何编写更容易被人理解以及如何编写尽可能优雅的代码。 比如本例中的 咖啡,其实是 水 + 咖啡液 ,里面再混合上 冰、热、常温等概念后,就需要精心设计一下程序, 让别人易读且代码不累赘。 可以往这方面思考一下