pythonでProxyパターン
pythonでデザインパターン考えるときってサンプル無いから結構しんどいんだよね
結構書き換えないといけない場合が多くて・・・
それでもProxyパターンは結構楽でした
で、早くできたからスレッド使ってFreeBSDの起動時にくるくる回ってるのみたいなのを作ってみた
#!/usr/bin/env python
# -*- coding: utf-8 -*-import sys
import threading
import timeclass 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