pythonでProxyパターン

pythonデザインパターン考えるときってサンプル無いから結構しんどいんだよね

結構書き換えないといけない場合が多くて・・・

それでもProxyパターンは結構楽でした

で、早くできたからスレッド使ってFreeBSDの起動時にくるくる回ってるのみたいなのを作ってみた


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import threading
import time

class Image: # interface
def displayImage(): return None

class RealImage(Image, threading.Thread): #
filename = ""
def __init__(self, filename):
threading.Thread.__init__(self)
self.filename = filename
self.loadImageFromDisk()

def loadImageFromDisk(self):
threads = []
sys.stdout.write(self.filename + " Loading...")
sys.stdout.flush()

# start thread
self.start()
threads.append(self)
list = ['|', '/', '-', '\\']
cnt = 0
while self.isAlive() is True:
sys.stdout.write(list[cnt])
sys.stdout.flush()
sys.stdout.write("\b")
sys.stdout.flush()
#sys.stdout.close()
time.sleep(0.1)
cnt += 1
if cnt > 3:
cnt = 0
sys.stdout.write('\b\t\t[ OK ]\n')
sys.stdout.flush()
time.sleep(0.5)

for thread in threads:
thread.join()

def run(self):
for i in xrange(1,100000000):
if i >= 100000000:
break


def displayImage(self):
print("Displaying : " + self.filename)

class ProxyImage(Image): #
filename = ""
image = None

def __init__(self, filename):
self.filename = filename

def displayImage(self):
if self.image is None:
self.image = RealImage(self.filename)
self.image.displayImage()

class ProxyExample: # example
def main(self, *args):
image1 = ProxyImage("testImage01");
image2 = ProxyImage("testImage02");
image3 = ProxyImage("testImage03");

image1.displayImage()
image2.displayImage()
image2.displayImage()



if __name__ == "__main__":
try:
ProxyExample().main()
except Exception,e:
print(e)

RealImageクラスが継承してるthreading.Treadのrunメソッドをオーバーライドしてます

でrunメソッドが処理してる間はくるくるーって

Proxyパターンの参照はこちらから
http://ja.wikipedia.org/wiki/Proxy_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3