Fluent Interface(流れるようなインタフェース)をPythonでやってみよう
30分プログラム、その529。ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーションを読んでいたら「言語内にDSLを作りたいときは、Fluent Interface(流れるようなインタフェース)を使うといいよ!」と書いてあった。
そういえばFluent Interface(流れるようなインタフェース)は書いたことがなかったので、Pythonでやってみよう。
個人的には、内部DSLを作るときはFluent Interfaceを使うよりも、クロージャとかを使うほうが好みです。
使い方
sb = ShapeBuilder() rect = sb. kind('square'). width(10). height(20). color('red'). shape()
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # fluent.py - # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/02/17 14:23:48 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # class Shape(): def area(self): return self.width * self.height class ShapeBuilder(): def __init__(self): self.subject = Shape() def kind(self,kind): self.subject.kind = kind return self def width(self,width): self.subject.width = width return self def height(self,height): self.subject.height = height return self def color(self,color): self.color = color return self def shape(self): return self.subject sb = ShapeBuilder() rect = sb.kind('square').width(10).height(20).color('red').shape() print rect.area()