なんじゃくにっき

プログラミングの話題中心。

2010-08-06から1日間の記事一覧

Scala de Design Pattern: Factory Method / Abstract Factory

Factory Methodパターン & Abstract Factoryパターン。abstract class 親 { def の子: 子 } abstract class 子 class カエル extends 親 { def の子 = new オタマジャクシ } class オタマジャクシ extends 子 { println("カエルの子はカエル") } class トン…

Scala de Design Pattern: Template Method

Template Methodパターン。 おおまかな処理を先に決めておいて細かい処理は最終的な実装に任せる。 traitの関数が実装を持てることを利用して実装してみた。trait Hoge { def execute = { methodA methodB methodC } def methodA: Unit def methodB: Unit de…

Scala de Design Pattern: Composite

Compositeパターン。 割と普通。abstract class Node(name: String) { override def toString = name def addChild(node: Node): Unit def callRecursively = println(toString) }class InnerNode(name: String) extends Node(name: String) { var children …

Scala de Design Pattern: Flyweight

Flyweightパターン。 小さいオブジェクトを使い回す。 あまりScalaっぽい書き方はできなかった・・ 強いて言うならばpoolにインスタンスか存在するか調べるときにSomeとNoneを使うところか。class Piyo(name: String) { println(name) }object PiyoFactory {…

Scala de Design Pattern: Adapter

Adapterパターン。 既存のクラスを変更せずに振る舞いを追加したい場合に使用する。 Scalaではnewするときにtraitを付与できるがその際に実装のない関数の中身も実装できる。class Item(cost: Int) { def getCost = cost }trait Price { def getPrice: Int }…

Scala de Design Pattern: Decorator

Decoratorパターンを実装する。 既存のクラスのインターフェイスを保ったまま振る舞いを変えるのがDecorator。 Scalaではnewするときにもtraitを付与できるのを利用する。trait Animal { def roar: Unit }class AnimalImpl extends Animal{ def roar = print…

Scala de Design Pattern: Strategy

Strategyパターンを実装してみる。 Strategyパターンはオブジェクトの振る舞いを実行時に変更するパターン。 Javaの場合は、実際のアルゴリズムを記述した別クラスに委譲することで達成する。 Scalaでは関数は第一級オブジェクトなので関数をそのままインス…

Scala de Design Pattern: Iterator

今回はIteratorパターン。 hasNextとnextを持つアレっすな。アレ、アレ! コレクションフレームワークに隠蔽されて直に使われることの余りないアレっす! scala.collectionパッケージにはIterator traitだけでなくIterator Objectもある。 これを使うと簡単…