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%
_ ,
バーカバーカ
[ツッコミを入れる]