irpas技术客

23种设计模式-python实现_laufing

网络投稿 4863

文章目录 五大原则设计模式的类别python 实现策略模式装饰器模式单例模式工厂模式

五大原则

单一职责原则(Single responsibility principle) 每个类只完成一项功能,仅有一个引起它变化的原因。 优点: 降低类的复杂度和变更引起的风险; 提高类的可读性,可维护性。

接口隔离原则(Interface Segregation Principle) 接口中的方法尽量少,内部的操作尽量不暴露给其他接口。 实现低耦合高内聚。

里氏替换原则(Liskov Substitution Principle) 父类适用的地方,子类必定也可以使用。

开闭原则(Open Closed Principle) 一个软件实体(如模块、类、函数)对修改代码关闭,扩展功能开放,提高代码的复用性、可维护性。

依赖倒置原则(Dependence Inversion Principle) 高层模块不应该依赖于低层模块,二者都应该依赖于抽象; 解耦

设计模式的类别 行为型 策略模式,结构型 装饰器模式,创建型 单例模式,工厂模式, python 实现 策略模式

类可以根据不同的场景,选择不同的策略算法。

""" 策略模式 行为型 类可以根据不同的场景,选择不同的策略算法。 数据结构:字典 { 场景名字: 策略函数, } 注册策略,添加key-value 获取策略 """ # 策略管理类 class StrategyManager: """ 策略管理类 """ def __init__(self): self.strategy = {} def get_strategy(self, scene): """ 获取策略函数 """ return self.strategy.get(scene) def register_strategy(self, scene, func): """ 注册场景策略 """ self.strategy[scene] = func # 策略类 class Strategy: """ 策略类, 算法函数实现 """ @staticmethod def drive_car(): print("驾驶小汽车...") @staticmethod def drive_moto(): print("骑摩托车...") @staticmethod def drive_bike(): print("骑自行车...") # 场景类 class Scene: """ 场景类 """ def __init__(self, name): self.name = name if __name__ == '__main__': strategy_manager = StrategyManager() # 注册策略 strategy_manager.register_strategy("city", Strategy.drive_car) strategy_manager.register_strategy("country", Strategy.drive_moto) strategy_manager.register_strategy("mountain", Strategy.drive_bike) # 选择山区策略 strategy_manager.get_strategy("mountain")() 装饰器模式

使用类装饰一个对象,不改变其代码的情况下,扩展其功能。

""" 装饰器模式, 结构型 使用类装饰一个对象,不改变其代码的情况下,扩展其功能 普通类(被装饰) 装饰类 包裹类 """ # 普通类 class Person: def __init__(self, name): self.name = name def intro(self): print(f"{self.name} 是普通人...") # 装饰类 class SaiWen: def __init__(self, person): self.person = person def da_gai_shou(self): print(f"{self.person.name} 是奥特曼, 正在打怪兽...") # 包裹类 class Wrapper: def __init__(self, person, deco_class): self.person = person self.deco = deco_class(person) def __getattr__(self, attr): try: return getattr(self.person, attr) except AttributeError: return getattr(self.deco, attr) if __name__ == '__main__': person = Person("jack") person.intro() # 装饰person对象 wrapper = Wrapper(person, SaiWen) wrapper.intro() wrapper.da_gai_shou() 单例模式

类,只创建一个对象

class Singleton(object): def __new__(cls, *args, **kwargs): # 只创建一个对象 if hasattr(cls, "_Singleton__instance"): return cls.__instance cls.__instance = object.__new__(cls) return cls.__instance def __init__(self, *args, **kwargs): # 只初始化一次 if hasattr(self, "_Singleton__init"): return object.__init__(self) self.__init = True def __eq__(self, other): if self is other: print("是同一个对象") else: print("不是同一个对象") if __name__ == '__main__': s = Singleton() s2 = Singleton() print(s == s2) 工厂模式

pending


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #23种设计模式python实现 #23种设计模式 #python实现