Python面向对象——设计模式
Python设计模式
一个定义:为了解决面向对象系统中重要和重复的设计封装在一起的一种代码实现框架,可以使得代码更加易于扩展和调用。
四个基本要素:模式名称、问题、解决方案、效果。
六大原则:
1、开闭原则:一个软件实体,如类,模块和函数应该对扩展开发,对修改关闭.既软件实体应尽量在不修改原有代码的情况下进行扩展。
2、里氏替换原则:所有引用父类的方法必须能透明的使用其子类的对象。
3、依赖倒置原则:高层模块不应该依赖底层模块,二者都应该依赖其抽象,抽象不应该依赖于细节,细节应该依赖抽象,换而言之,要针对接口编程而不是针对实现编程。
4、接口隔离原则:使用多个专门的接口,而不是使用单一的总接口,即客户端不应该依赖那些并不需要的接口。
5、迪米特法则:一个软件实体应该尽可能的少与其他实体相互作用。
6、单一直责原则:不要存在多个导致类变更的原因,即一个类只负责一项职责。
比较流行的是:GOF23种设计模式。
设计模式——工厂模式
工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一的管理和控制。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28class CarFactory:
def create_car(self, brand):
if brand == '奔驰':
return Benz()
elif brand == '宝马':
return BMW()
elif brand == '比亚迪':
return BYD()
else:
return '未知品牌,无法创建'
class Benz():
pass
class BMW():
pass
class BYD():
pass
factory = CarFactory()
c1 = factory.create_car('奔驰')
c2 = factory.create_car('宝马')
c3 = factory.create_car('比亚迪')
print(c1)
print(c2)
print(c3)
打印结果如下:1
2
3<__main__.Benz object at 0x0261EBD0>
<__main__.BMW object at 0x0261E9F0>
<__main__.BYD object at 0x0261ECB0>
设计模式——单例模式
单例模式(Singleton Pattern)的核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点。
单例模式只生成一个实例对象,减少了对系统资源的开销。当一个对象的产生需要比较多的资源,
如读取配置文件、产生其他依赖对象时,可以产生一个“单例对象”,然后永久驻留在内存中,从而极大的降低开销。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20class MySingleton:
__obj = None # 类属性
__init_flag = True
def __new__(cls, *args, **kwargs):
if cls.__obj == None:
cls.__obj = object.__new__(cls)
return cls.__obj
def __init__(self, name):
if MySingleton.__init_flag:
print("init.......")
self.name = name
MySingleton.__init_flag = False
a = MySingleton('aa')
b = MySingleton('bb')
print(a)
print(b)
打印结果如下:1
2
3init.......
<__main__.MySingleton object at 0x0305E250>
<__main__.MySingleton object at 0x0305E250>
工厂模式和单例模式的整合应用
1 | class CarFactory: |
打印结果如下啊:1
2
3
4init CarFactory.......
<__main__.Benz object at 0x02E2ECF0> <__main__.BMW object at 0x02E2EC30> <__main__.BYD object at 0x02E2ED10>
<__main__.CarFactory object at 0x02CBA450>
<__main__.CarFactory object at 0x02CBA450>
参考有:Python设计模式