天天看点

几行代码搞定python 设计模式[转]

几行代码搞定python 设计模式[转]

#!/usr/bin/env python   

# -*- coding:utf-8   

class HttpBase:   

    def get(self):   

        psss   

class Http1(HttpBase):   

        print 'http1'   

class Http2(HttpBase):   

        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):   

        self.httpobj = Http1()          

        print 'A notify', k       

        print 'show a'   

class BaseB(Base):   

        self.httpobj = Http2()   

        print 'B notify', k   

        print 'show b'   

#观测者模式   

class Observer:   

        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:   

        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')   

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!

本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/archive/2012/07/04/2575513.html,如需转载请自行联系原作者