github地址:https://github.com/cheesezh/python_design_patterns 题目 用程序模拟以下不同情况: 男人成功时,背后多半有一个伟大的女人: 女人成功时,背后多半有一个失败的男人: 男人失败时,闷头喝酒,谁也不用劝: 女人失败时,眼泪汪汪,谁也劝不了: 男人恋爱时,凡事不懂也要装逼: 女人恋爱时,遇事懂也装作不懂: 基础版本 from abc import ABCMeta,abstractmethod class Person(): __meta…
github地址:https://github.com/cheesezh/python_design_patterns 题目 用程序模拟以下情景 员工向经理发起加薪申请,经理无权决定,需要向总监汇报,加薪额度超过总监权力范围,需要向总经理汇报; 员工还可以提交请加申请,经理可以决定2天以下的假,总监可以决定5天以下的假,其余都要上报总经理; 基础版本 class Request(): def __init__(self): self.type = None # 申请类型 self.content…
github地址:https://github.com/cheesezh/python_design_patterns 迭代器模式 迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示[DP]. 当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式. 当需要对聚集有多种方式遍历时,也可以考虑使用迭代器模式. 迭代器为遍历不同的聚集结构提供如开始,下一个,是否结束,当前哪一项等统一接口. from abc import ABCMet…
github地址:https://github.com/cheesezh/python_design_patterns 题目 用代码模拟以下场景,一个游戏角色有生命力,攻击力,防御力等数据,在打Boss前后的数据值会发生变化,如果玩家挑战Boss失败,我们允许玩家可以将游戏数据恢复到与Boss决斗之前的状态. 基础版本 class GameRole(): def __init__(self): self.vitality = 0 self.attack = 0 self.defense = 0…
github地址:https://github.com/cheesezh/python_design_patterns 简单工厂模式 v.s. 工厂方法模式 以简单计算器为例,对比一下简单工厂模式和工厂方法模式的区别. 简单工厂模式 from abc import ABCMeta, abstractmethod class Operation(): """ 抽象产品类(运算符类) """ __metaclass__ = ABCMeta def _…
github地址:https://github.com/cheesezh/python_design_patterns 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例模式就能派上用场. 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息.如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很…
github地址:https://github.com/cheesezh/python_design_patterns 写在前面的话 """ 读书的时候上过<设计模式>这一门课,当时使用的教材是程杰老师的<大话设计模式>,使用的语言是C#,学过课程之后初期深感面向对象思想的伟大,但是很少应用到实际开发中.后来我接触了Python,现在工作中用到最多的也是Python,或许是因为Python的便利性,我写的很多脚本/程序都还是面向过程编程,缺少面向对象的…
github地址:https://github.com/cheesezh/python_design_patterns 紧耦合程序演化 题目1 编程模拟以下情景,有一个N品牌手机,在上边玩一个小游戏. class HandsetNGame(): def run(self): print("运行N品牌手机游戏") def main(): game = HandsetNGame() game.run() main() 运行N品牌手机游戏 题目2 现在又有一个M品牌的手机,也有小游戏,客户端…
github地址:https://github.com/cheesezh/python_design_patterns 题目 设计一个简历类,必须有姓名,可以设置性别和年龄,即个人信息,可以设置曾就职公司和工作时间,即工作经历. 基础版本 class Resume(): def __init__(self, name): self.name = name # python默认成员变量公开 self.__sex = None # python默认成员变量公开,加__表示私有 self.__age…
github地址:https://github.com/cheesezh/python_design_patterns 题目1 Boy追求Girl,给Girl送鲜花,送巧克力,送洋娃娃. class Boy(): def __init__(self, girl): self.girl = girl def give_dolls(self): print("{}, 送你洋娃娃".format(self.girl.name)) def give_flowers(self): print(&…