雷

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

设计模式

发表于 2019-08-11 更新于 2019-08-15 分类于 python

python与设计模式

创建类设计模式:

单例模式:

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
28
29
30
31
32
33
34
35
36
# 单例模式
import threading
import time
#这里使用方法__new__来实现单例模式
class Singleton(object):#抽象单例
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kw)
return cls._instance
#总线
class Bus(Singleton):
lock = threading.RLock()
def sendData(self,data):
self.lock.acquire()
time.sleep(3)
print("Sending Signal Data...",data)
self.lock.release()
#线程对象,为更加说明单例的含义,这里将Bus对象实例化写在了run里
class VisitEntity(threading.Thread):
my_bus=""
name=""
def getName(self):
return self.name
def setName(self, name):
self.name=name
def run(self):
self.my_bus=Bus()
self.my_bus.sendData(self.name)

if __name__=="__main__":
for i in range(3):
print("Entity %d begin to run..."%i)
my_entity=VisitEntity()
my_entity.setName("Entity_"+str(i))
my_entity.start()
保证某一个类只有一个实例,而且在全局只有一个访问点
三、单例模式的优点和应用

单例模式的优点:
1、由于单例模式要求在全局内只有一个实例,因而可以节省比较多的内存空间;
2、全局只有一个接入点,可以更好地进行数据同步控制,避免多重占用;
3、单例可长驻内存,减少系统开销。
单例模式的应用举例:
1、生成全局惟一的序列号;
2、访问全局复用的惟一资源,如磁盘、总线等;
3、单个对象占用的资源过多,如数据库等;
4、系统全局统一管理,如Windows下的Task Manager;
5、网站计数器。
四、单例模式的缺点

1、单例模式的扩展是比较困难的;
2、赋于了单例以太多的职责,某种程度上违反单一职责原则(六大原则后面会讲到);
3、单例模式是并发协作软件模块中需要最先完成的,因而其不利于测试;
4、单例模式在某种情况下会导致“资源瓶颈”。

工厂模式

工厂模式常与继承派生一起使用,定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。

抽象工厂模式

原型模式

图层概念
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
需要注意一点的是,进行clone操作后,新对象的构造函数没有被二次执行,新对象的内容是从内存里直接拷贝的。

建造者模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

结构类设计模式:

代理模式

为某对象提供一个代理,以控制对此对象的访问和控制。代理模式在使用过程中,应尽量对抽象主题类进行代理,而尽量不要对加过修饰和方法的子类代理。

装饰器模式

动态地给一个对象添加一些额外的职责。在增加功能方面,装饰器模式比生成子类更为灵活。

适配器模式

将一个类的接口变换成客户端期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式和装饰模式有一定的相似性,都起包装的作用,但二者本质上又是不同的,装饰模式的结果,是给一个对象增加了一些额外的职责,而适配器模式,则是将另一个对象进行了“伪装”。

门面模式

组合模式

享元模式

桥梁模式

行为类设计模式:

策略模式

责任链模式

命令模式

触发-反馈机制的系统,都可以使用命令模式思想。如基于管道结构的命令系统(如SHELL),可以直接套用命令模式;此外,GUI系统中的操作反馈(如点击、键入等),也可以使用命令模式思想。

中介者模式

模板模式

比较复杂的算法,可以把核心算法提取出来,周边功能在子类中实现。例如,机器学习中的监督学习算法有很多,如决策树、KNN、SVM等,但机器学习的流程大致相同,都包含输入样本、拟合(fit)、预测等过程,这样就可以把这些过程提取出来,构造模板方法,并通过钩子方法控制流程。

迭代器模式

访问者模式

观察者模式

观察者模式也叫发布-订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得当该对象状态改变时,所有依赖于它的对象都会得到通知,并被自动更新。

解释器模式

备忘录模式

状态模式

https://yq.aliyun.com/topic/122

# python
自动驾驶
Ubuntu安装opencv
  • 文章目录
  • 站点概览
ray

ray

17 日志
23 分类
18 标签
RSS
  1. 1. python与设计模式
    1. 1.1. 创建类设计模式:
      1. 1.1.1. 单例模式:
      2. 1.1.2. 工厂模式
      3. 1.1.3. 抽象工厂模式
      4. 1.1.4. 原型模式
      5. 1.1.5. 建造者模式
    2. 1.2. 结构类设计模式:
      1. 1.2.1. 代理模式
      2. 1.2.2. 装饰器模式
      3. 1.2.3. 适配器模式
      4. 1.2.4. 门面模式
      5. 1.2.5. 组合模式
      6. 1.2.6. 享元模式
      7. 1.2.7. 桥梁模式
    3. 1.3. 行为类设计模式:
      1. 1.3.1. 策略模式
      2. 1.3.2. 责任链模式
      3. 1.3.3. 命令模式
      4. 1.3.4. 中介者模式
      5. 1.3.5. 模板模式
      6. 1.3.6. 迭代器模式
      7. 1.3.7. 访问者模式
      8. 1.3.8. 观察者模式
      9. 1.3.9. 解释器模式
      10. 1.3.10. 备忘录模式
      11. 1.3.11. 状态模式
0%
© 2020 ray
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Pisces v7.3.0