`
poson
  • 浏览: 347928 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

(8)python教程:几行代码搞定python 设计模式

阅读更多
#!/usr/bin/env python 
# -*- coding:utf-8 

class HttpBase: 
    def get(self): 
        psss 
class Http1(HttpBase): 
    def get(self): 
        print 'http1' 
class Http2(HttpBase): 
    def get(self): 
        print 'http2' 


class Base: 
    def __init__(self): 
        self.httpobj = None 
    def http(self): 
        self.httpobj.get() 
    def compute(self): 
        self.http() 
        self.show() 
    #虚函数 
    def show(self): 
        pass 
    def notify(self, k): 
        print 'notify', k 
        

#桥接模式,通过A,B 关联不同的http1和http2 
class BaseA(Base): 
    def __init__(self): 
        self.httpobj = Http1()        
    def notify(self, k): 
        print 'A notify', k     
    def show(self): 
        print 'show a' 
           
class BaseB(Base): 
    def __init__(self): 
        self.httpobj = Http2() 
    def notify(self, k): 
        print 'B notify', k 
    def show(self): 
        print 'show b' 

#观测者模式 
class Observer: 
    def __init__(self): 
        self.listOB = [] 
    def register(self, obj): 
        self.listOB.append(obj) 
    def notify(self): 
        for obj in self.listOB: 
            obj.notify(len(self.listOB)) 

#适配器模式 
class B1: 
    def http(self): 
        BaseB().http() 
#工厂模式 
class Factory: 
    def CreateA(self): 
        return BaseA() 
    def CreateB(self): 
        return BaseB() 


#单例模式 
class Logger(object): 
    log = None 
    @staticmethod 
    def new(): 
        
        import threading 
        #线程安全 
        mylock = threading.RLock() 
        mylock.acquire() 
        if not Logger.log: 
            Logger.log = Logger() 
        mylock.release() 
        
        return Logger.log 
    def write(self, v): 
        print 'Logger ', v 

if __name__ == "__main__": 
    a = Factory().CreateA() 
    b = Factory().CreateB() 
    
    objS = Observer() 
    objS.register(a) 
    objS.register(b) 
    
    a.compute() 
    b.compute() 
    objS.notify() 
    
    b1 = B1() 
    b1.http() 
    
    Logger.new().log.write('v') 

 


其他参考:
(1)python教程:hello world
(2)python教程:数据类型和运算规则
(3)python教程:元组,列表,词典
(4)python教程:分支、循环
(5)python教程:函数
(6)python教程:class
(8)python教程:几行代码搞定python 设计模式

 

5
1
分享到:
评论
1 楼 guji528 2012-11-20  
很好,清晰明了!

相关推荐

Global site tag (gtag.js) - Google Analytics