2010-08-08 :-)
_ 朝ッ
0900 起床
_ [Python][デザインパターン][Factory]Python でデザインパターン - Factory
書き換え[ 20090506#p04 ]
#!/usr/bin/python # -*- coding: utf-8 -*- # Head First デザインパターンを写経する - 4章 Factory パターン - ヨタの日々(2009-05-06) # http://www.area51.gr.jp/~rin/diary/?date=20090506#p04 class PizzaStore: def orderPizza(self, _type): self.pizza = self.createPizza(_type) self.pizza.prepare() self.pizza.bake() self.pizza.cut() self.pizza.box() return self.pizza def createPizza(self, _type): pass class NYPizzaStore(PizzaStore): def createPizza(self, item): if item == "チーズ": return NYStyleCheesePizza() ## elif item == "野菜": ## return NYStyleVeggiePizza() ## elif item == "クラム": ## return NYStyleClamPizza() ## elif item == "ペパロニ": ## return NYStylePepperoniPizza() else: return None class ChicagoPizzaStore(PizzaStore): def createPizza(self, item): if item == "チーズ": return ChicagoStyleCheesePizza() ## elif item == "野菜": ## return ChicagoStyleVeggiePizza() ## elif item == "クラム": ## return ChicagoStyleClamPizza() ## elif item == "ペパロニ": ## return ChicagoStylePepperoniPizza() else: return None class CaliforniaPizzaStore(PizzaStore): def createPizza(self, item): if item == "チーズ": return CaliforniaStyleCheesePizza() ## elif item == "野菜": ## return CaliforniaStyleVeggiePizza() ## elif item == "クラム": ## return CaliforniaStyleClamPizza() ## elif item == "ペパロニ": ## return CaliforniaStylePepperoniPizza() else: return None class Pizza: def __init__(self): self.name = None self.dough = None self.sauce = None self.toppings = None def prepare(self): print "%s を下処理" % (self.name) print "生地をこねる..." print "ソースを追加..." print "トッピングを追加:" for t in self.toppings: print " %s" % (t) def bake(self): print "350度で25分間焼く" def cut(self): print "ピザを扇形に切り分ける" def box(self): print "PizzaStore の正式な箱にピザを入れる" def getName(self): return self.name class NYStyleCheesePizza(Pizza): def __init__(self): self.name = "ニューヨークスタイルのソース&チーズピザ" self.dough = "薄いクラスト生地" self.sauce = "マリナラソース" self.toppings = [] self.toppings.append("粉レッジャーノチーズ") class ChicagoStyleCheesePizza(Pizza): def __init__(self): self.name = "シカゴスタイルのディープディッシュチーズピザ" self.dough = "極厚クラスト生地" self.sauce = "プラムトマトソース" self.toppings = [] self.toppings.append("刻んだモッツァレラチーズ") def cut(self): print "ピザを四角形に切り分ける" def main(): nyStore = NYPizzaStore() chicagoStore = ChicagoPizzaStore() pizza = nyStore.orderPizza("チーズ") print "イーサンの注文は %s" % (pizza.getName()) pizza = chicagoStore.orderPizza("チーズ") print "ジョエルの注文は %s" % (pizza.getName()) main()
% python factory.py ニューヨークスタイルのソース&チーズピザ を下処理 生地をこねる... ソースを追加... トッピングを追加: 粉レッジャーノチーズ 350度で25分間焼く ピザを扇形に切り分ける PizzaStore の正式な箱にピザを入れる イーサンの注文は ニューヨークスタイルのソース&チーズピザ シカゴスタイルのディープディッシュチーズピザ を下処理 生地をこねる... ソースを追加... トッピングを追加: 刻んだモッツァレラチーズ 350度で25分間焼く ピザを四角形に切り分ける PizzaStore の正式な箱にピザを入れる ジョエルの注文は シカゴスタイルのディープディッシュチーズピザ
_ [Python][デザインパターン][State]Python でデザインパターン - State
書き換え[ 20090531#p06 ]
#!/usr/bin/python # -*- coding: utf-8 -*- # Head First デザインパターンを写経する - 10章 State パターン - ヨタの日々(2009-05-31) # http://www.area51.gr.jp/~rin/diary/?date=20090531#p06 class State: def insertQuarter(self): pass def ejectQuarter(self): pass def turnCrank(self): pass def dispense(self): pass class HasQuarterState(State): def __init__(self, gumballMachine): self.gumballMachine = gumballMachine def insertQuarter(self): print "もう一度25セントを投入することはできません" def ejectQuarter(self): print "25セントを返却します" self.gumballMachine.setState(self.gumballMachine.getNoQuarterState()) def turnCrank(self): print "クランクを回しました..." self.gumballMachine.setState(self.gumballMachine.getSoldState()) def dispense(self): print "販売するガムボールはありません" def __str__(self): return "waiting for turn of crank" class NoQuarterState(State): def __init__(self, gumballMachine): self.gumballMachine = gumballMachine def insertQuarter(self): print "25セントを投入しました" self.gumballMachine.setState( self.gumballMachine.getHasQuarterState()) def ejectQuarter(self): print "25セントを投入していません" def turnCrank(self): print "クランクを回しましたが、25セントを投入していません" def dispense(self): print "まず支払いをする必要があります" def __str__(self): return "25セントが投入されるのを待っています" class SoldOutState(State): def __init__(self, gumballMachine): self.gumballMachine = gumballMachine def insertQuarter(self): print "25セントを投入することはできません。このマシンは売り切れです" def ejectQuarter(self): print "返金できません。まだ25セントを投入していません" def turnCrank(self): print "クランクを回しましたが、ガムボールがありません" def dispense(self): print "販売するガムボールはありません" def __str__(self): return "売り切れです" class SoldState(State): def __init__(self, gumballMachine): self.gumballMachine = gumballMachine def insertQuarter(self): print "お待ちください。すでにガムボールを出しています" def ejectQuarter(self): print "申し訳ありません。すでにクランクを回しています" def turnCrank(self): print "2回回してもガムボールをもう1つ入手することはできません!" def dispense(self): self.gumballMachine.releaseBall if self.gumballMachine.getCount() > 0: self.gumballMachine.setState(self.gumballMachine.getNoQuarterState()) else: print "おっと、ガムボールがなくなりました!" self.gumballMachine.setState(self.gumballMachine.getSoldOutState()) def __str__(self): "dispensing a gumball" class GumballMachine: def __init__(self, numberGumballs): self.soldOutState = SoldOutState( self ) self.noQuarterState = NoQuarterState( self ) self.hasQuarterState = HasQuarterState( self ) self.soldState = SoldState( self ) self.state = self.soldOutState self.count = numberGumballs if numberGumballs > 0: self.state = self.noQuarterState def insertQuarter(self): self.state.insertQuarter() def ejectQuarter(self): self.state.ejectQuarter() def turnCrank(self): self.state.turnCrank() self.state.dispense() def setState(self, state): self.state = state def releaseBall(self): print "ガムボールがスロットから転がり出てきます" if self.count != 0: self.count = self.count - 1 def getCount(self): return self.count def refill(self, count): self.count = count self.state = self.noQuarterState def getState(self): return self.state def getSoldOutState(self): return self.soldOutState def getNoQuarterState(self): return self.noQuarterState def getHasQuarterState(self): return self.hasQuarterState def getSoldState(self): return self.soldState def __str__(self): result = "" result += "\nMighty Gumball, Inc." result += "\nJava対応据付型ガムボール モデル #2004" result += "\n在庫: #{self.count} 個のガムボール" result += "\nマシンは%s" % (self.state) return result def main(): gumballMachine = GumballMachine( 5 ) print gumballMachine gumballMachine.insertQuarter() gumballMachine.turnCrank() print gumballMachine gumballMachine.insertQuarter() gumballMachine.turnCrank() gumballMachine.insertQuarter() gumballMachine.turnCrank() print gumballMachine main()
% python state.py Mighty Gumball, Inc. Java対応据付型ガムボール モデル #2004 在庫: #{self.count} 個のガムボール マシンは25セントが投入されるのを待っています 25セントを投入しました クランクを回しました... Mighty Gumball, Inc. Java対応据付型ガムボール モデル #2004 在庫: #{self.count} 個のガムボール マシンは25セントが投入されるのを待っています 25セントを投入しました クランクを回しました... 25セントを投入しました クランクを回しました... Mighty Gumball, Inc. Java対応据付型ガムボール モデル #2004 在庫: #{self.count} 個のガムボール マシンは25セントが投入されるのを待っています
_ 盛り上がるネタ
- ベストなテキストエディタはなんですか?
- おすすめのプログラミング言語はなんですか?
- Linux って Windows よりショボイんでしょ?
- ○○されるほうが悪い( ○○には犯罪の名前が入る )
- 処女厨
_ ,
ベイシスケイプ分がまったく不足しているのでトレジャーハンターGを聞くなどしている。
_ sizeof
CentOS 64bit な環境でリベンジ [ 20100502#p02 ]
#include <stdio.h> int main( int ac, char** av ) { printf( "%d\n", sizeof( int ) ); printf( "%d\n", sizeof( long ) ); printf( "%d\n", sizeof( void* ) ); return 0; }
$ gcc size.c && ./a.out 4 8 8
フォカヌポウ
_ LPIC って自慢になるの?
周囲には趣味で LPIC 出題範囲内くらいのことをおこなっているひとはゴロゴロいるし自分でもやってるので( 自宅にサーバー設置して Linux でも *BSD でもいいからテキトーな計算機にテキトーにオペレーティングシステムをインストールして DNS 設定して Postfix などを運用しメーリングリストなどを使えるようにしておけば LPIC レベル 2 まではイケル ) LPIC 取得した程度で自慢になるのかどうか分からん。
LPIC、自己満足のためだったら意味はないといっておこう。<br>業務を割り当てるときの能力を示す指標で使うものだから、<br>そういう使い方してない会社ではどんな資格も価値無いよ^^;
業務ではまったく使わないし、会社からおカネもらえるのでやってるだよ