设计模式
ailinyingai
DevOps 搬砖人 干饭人
展开
-
组合模式
我们把Composite模式看成一个复杂的属性结构,其实基本有三种角色:树干(定义一些操作树叶leaf的操作),树枝(树干上有很多树枝)和树叶(树干想要具体操作的对象) ,Composite模式帮我们实现:即它们在充当对象的时候,还是其他对象的容易,从而提供一致性class Trunk(object): '''树干''' def __str__(self): pa...翻译 2019-12-02 14:35:28 · 70 阅读 · 0 评论 -
责任chain模式
class BaseHandler: # 它起到了链的作用 def successor(self, successor): self.successor = successorclass ScoreHandler1(BaseHandler): def handle(self, request): if request > 90 an...翻译 2019-12-02 14:00:50 · 170 阅读 · 1 评论 -
模板方法模式
class Builder(object): """基类""" def Part1(self): raise NotImplementedError() def Part2(self): raise NotImplementedError() def Build(self): self.Part1()...翻译 2019-12-02 13:49:35 · 78 阅读 · 0 评论 -
建造者模式
class Builder(object): """基类""" def Part1(self): # 不同类型的产品,该步骤的细节可能不同 raise NotImplementedError() def Part2(self): # 不同类型的产品,该步骤的细节可能不同 raise NotImpl...翻译 2019-12-02 13:48:27 · 79 阅读 · 0 评论 -
多用组合 少用继承
1、组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合。2、作用是可以将两个本来不相关的类联系起来。一般是两个类之间有显著的不同,很多时候还要附属关系(有相同的属性也有不同的属性)。比如人和头,手机和电池等等3、无纵向关系时用组合,有纵向关系时用继承4、组合就是一个类中使用到另一个类,从而把几个类拼到一起。组合的功能也是为了减少重复代码。class Turtle: ...原创 2019-12-02 10:02:55 · 390 阅读 · 0 评论 -
单例模式
class Borg(object):__shared_state = {}def __init__(self): self.__dict__ = self.__shared_state self.state = 'Init'def __str__(self): return self.stateclass Singleton(object):def new(...翻译 2019-11-29 17:22:36 · 99 阅读 · 0 评论 -
抽象工厂
#coding=utf-8import abc两种小汽车class Mercedes_C63(object):“”“梅赛德斯 C63“””def repr(self):return “Mercedes-Benz: C63”class BMW_M3(object):“”“宝马 M3“””def repr(self):return “BMW: M3”# 两种SUVclass...翻译 2019-11-29 17:10:43 · 156 阅读 · 0 评论 -
工厂方法
#coding=utf-8import abcclass AbstractFactory(object): """抽象工厂 """ __metaclass__ = abc.ABCMeta @abc.abstractmethod def product_car(self): passclass MercedesFactory(Abs...翻译 2019-11-29 17:08:52 · 65 阅读 · 0 评论 -
简单工厂
#coding=utf-8class Mercedes(object): """梅赛德斯 """ def __repr__(self): return "Mercedes-Benz"class BMW(object): """宝马 """ def __repr__(self): return "BMW"cla...原创 2019-11-29 17:05:34 · 65 阅读 · 0 评论 -
属性的委托 代理模式
class Proxy(object): def __init__(self, subject): self.__subject = subject # 代理其实本质上就是属性的委托 def __getattr__(self, name): return getattr(self.__subject, name)class RGB: ...原创 2019-11-29 16:12:36 · 131 阅读 · 0 评论 -
装饰模式
#encoding=utf-8from abc import ABCMeta, abstractmethodclass Person(): def __init__(self, name): self.name = name def decorator(self, component): self.component = componen...原创 2019-11-29 16:08:47 · 59 阅读 · 0 评论 -
代理模式
代理模式的应用场景:1.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。2.虚拟代理,是根据需要创建开销大的对象。通过它来存放实例化需要很长时间的真是对象,例如html中,图片需要load很久,所以通过虚拟代理来代替真实的图片3.安全代理,用来控制真实对象访问时的权限4.智能指引,是指当调用真实的对象时,代理处理另外一些事from a...原创 2019-11-29 16:03:31 · 95 阅读 · 0 评论 -
对象池
import Queueimport typesimport threadingfrom contextlib import contextmanagerclass ObjectPool(object): def __init__(self, fn_cls, *args, **kwargs): super(ObjectPool, self).__init__()...原创 2019-11-29 16:01:12 · 96 阅读 · 0 评论 -
null 模式
class A(object): passclass B(object): b = 1 @classmethod def test(cls): print cls.bdef get_test(x): try: return x.test except AttributeError: retur...原创 2019-11-28 14:31:06 · 215 阅读 · 0 评论 -
观察者
# 这个是观察者基类class Subject(object): def __init__(self): self._observers = [] # 添加依赖的对象 def attach(self, observer): if not observer in self._observers: self._obse...原创 2019-11-28 10:18:12 · 96 阅读 · 0 评论 -
桥接模式
这个模式其实就是把产品类的实现和抽象类分离,能够灵活的变化,假如你记得状态模式,它是修改内部属性, 而桥接模式是指定好内部属性,每个产品类指定这个属性被桥接模式类调用,适用于产品类可能经常调整变化,这样还能减少了产品类之间的耦合class Bridge(object): def __init__(self): self.__implementation = None...原创 2019-11-28 09:59:54 · 86 阅读 · 0 评论 -
备忘录模式
import copydef Memento(obj, deep=False): # 对你要做快照的对象做快照 state = (copy.copy if deep else copy.deepcopy)(obj.__dict__) def Restore(): obj.__dict__ = state return Restoreclas...翻译 2019-11-28 09:33:56 · 88 阅读 · 0 评论 -
适配器模式
pass翻译 2019-11-28 09:23:08 · 83 阅读 · 0 评论 -
代理模式
pass原创 2019-11-28 09:13:23 · 72 阅读 · 0 评论 -
单例模式
test原创 2019-11-28 09:06:11 · 107 阅读 · 0 评论 -
责任链
责任链模式比较好理解,这里以域名解析为例说明一下。我们知道域名解析(也即DNS解析)是由近到远逐级进行的,它一般会经过如下几个步骤:查找本地hosts文件,若有,则返回,没有,则下一步查找本地DNS服务器(路由器),若有,则返回,没有,则下一步查找区域内的DNS服务器(如深圳),若有,则返回,没有,则下一步……就这样一级一级,直到能解析出ip为止。按照这个思路我们去实现它,先定义责任链...原创 2019-10-01 16:13:07 · 168 阅读 · 0 评论