一。单例模式
我们先用单例模式设计一个Rectangle类
然后用__new__方法设计单例模式,代码如下
然后我们来验证下,单例模式下是否只能生成一个实例
单例模式在程序设计中比较典型的应用场景:多个用户同时调用某个模块时,会生成一些日志,我们希望这些日志存在同一个文件内,而不是多个文件。
在生成日志模块我们就可以采用单例模式进行设计。
二。反射
概念:简单来说就是可以利用字符串来映射模块中的相应方法然后可以操作模块中相应的方法
我们以一个饭店点菜的实际场景来理解Python的反射机制
hasatter(对象,属性或方法名)
判断对象中是否有某个属性或某个方法,返回值是布尔型
getattr(对象,属性或方法名,缺省值) 判断对象中是否有某个属性或某个方法,如果有返回方法本身,没有则返回缺省值
setattr(对象,属性,新值)
将实例的属性改为新的值,如果属性不存在则新建
我们给实例guke1加个价格属性
python常用的几种设计模式有:1、单例模式,确保某一个类只有一个实例;2、工厂模式,使用一个公共的接口来创建对象;3、策略模式,随着策略对象改变内容;4、门面模式,对子系统的封装,使得封装接口不会被单独提出来。
什么是设计模式?
设计模式是一套被反复使用,多数人知道,经过分类编目的代码设计经验总结。
使用设计模式是为了提高代码可重用性,可阅读性,和可靠性。
你说理解的设计模式有几种?
设计模式又可分为三种:创建型(单例模式)、(工厂模式),结构型,行为型(策略模式)
单例模式以及应用场景:
(1)确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。Windows的Task Manager(任务管理器)、Recycle Bin(回收站)、网站计数器
(2)单例模式应用的场景一般发现在以下条件下:
资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。控制资源的情况下,方便资源之间的互相通信。如线程池等
要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
工厂模式:
提供一个创建对象的接口,不像客户端暴露创建对象的过程,而是使用一个公共的接口来创建对象。
可以分为三种:简单工厂 工厂方法 抽象工厂
一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
策略模式:
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
要点:把一个个策略,也就是算法封装成一个一个类,任意的替换
解决的问题:避免多个if....else带来的复杂
使用场景:系统中需要动态的在集中算法中动态的选择一种,
门面模式:
门面模式也叫外观模式,定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重“统一的对象”,也就是提供一个访问子系统的接口。门面模式与之前说过的模板模式有类似的地方,都是对一些需要重复方法的封装。但从本质上来说,是不同的。模板模式是对类本身的方法的封装,其被封装的方法也可以单独使用;而门面模式,是对子系统的封装,其被封装的接口理论上是不会被单独提出来用的。
一个对象有很多行为,如果么有选择合适的设计模式,这些行为就需要用多重的条件判断来实现算法的切换,增加了代码的复杂度。
推荐课程:Python面对对象(Corey Schafer)