2010-07-25 :-)
_ 朝ッ
0400 起床
_ [Python][デザインパターン][Strategy]Python でデザインパターン - Strategy
書き換え[ 20090504#p04 ]
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Head First デザインパターンを写経する - 1章 Strategy パターン - ヨタの日々(2009-05-04)
# http://www.area51.gr.jp/~rin/diary/?date=20090504#p04
class Duck:
def __init__(self):
self.quack_behavior = None
self.fly_behavior = None
def __init__(self):
pass
def perform_fly(self):
self.fly_behavior.fly()
def perform_quack(self):
self.quack_behavior.quack()
def swim(self):
print "すべての鴨は浮かびます。おとりの鴨でも!"
class FlyBehavior:
def fly(self):
pass
class FlyWithWings(FlyBehavior):
def fly(self):
print "飛んでいます!"
class FlyNoWay(FlyBehavior):
def fly(self):
print "飛べません!"
class QuackBehavior:
def quack(self):
pass
class Quack(QuackBehavior):
def quack(sel):
print "ガーガー"
class MuteQuack(QuackBehavior):
def quack(self):
print "<沈黙>>"
class Squack(QuackBehavior):
def quack(self):
print "キューキュー"
class MallardDuck(Duck):
def __init__(self):
self.quack_behavior = Quack()
self.fly_behavior = FlyWithWings()
def display(self):
print "本物のマガモです"
def main():
mallard = MallardDuck()
mallard.perform_quack()
mallard.perform_fly()
main()
% python strategy.py ガーガー 飛んでいます!
_ [Python][デザインパターン][Observer]Python でデザインパターン - Observer
書き換え[ 20090504#p07 ]
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Head First デザインパターンを写経する - 2章 Observer パターン - ヨタの日々(2009-05-04)
# http://www.area51.gr.jp/~rin/diary/?date=20090504#p07
class Subject:
def register_observer(self, observer):
pass
def remove_observer(self, observer):
pass
def notify_observers(self):
pass
class Observer:
def update(self, temp, humidity, pressure):
pass
class DisplayElement:
def display(self):
pass
class WeatherData(Subject):
def __init__(self):
self.temprature = None
self.humidity = None
self.pressure = None
self.observers = []
def register_observer(self, observer):
self.observers.append(observer)
def remove_observer(self, observer):
self.observers.delete(observer)
def notify_observers(self):
for o in self.observers:
o.update( self.temprature, self.humidity, self.pressure)
def measurements_changed(self):
self.notify_observers()
def set_measurements(self, temprature, humidity, pressure):
self.temprature = temprature
self.humidity = humidity
self.pressure = pressure
self.measurements_changed()
class CurrentConditionDisplay(Observer, DisplayElement):
def __init__(self, weatherData):
self.weatherdata = weatherData
self.weatherdata.register_observer(self)
def update(self, tempreture, humidity, pressure):
self.tempreture = tempreture
self.humidity = humidity
self.display()
def display(self):
print "現在の気象状況: 温度 %d度 湿度%d%%" % (self.tempreture, self.humidity)
def main():
weatherdata = WeatherData()
currentDisplay = CurrentConditionDisplay(weatherdata)
weatherdata.set_measurements(27, 65, 30.4)
weatherdata.set_measurements(28, 70, 29.2)
weatherdata.set_measurements(26, 90, 29.2)
main()
% python observer.py 現在の気象状況: 温度 27度 湿度65% 現在の気象状況: 温度 28度 湿度70% 現在の気象状況: 温度 26度 湿度90%
_ ,
バーカバーカ
[ツッコミを入れる]









