なんじゃくにっき

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

2010-01-01から1年間の記事一覧

Scala de Design Pattern: Façade

Façadeパターン。 関連する手続きを1つのクラスに集約して使いやすいインターフェイスを提供する。 いい例が思い浮かばなかった・・package designpattern.gof4.facadeobject Facade { def doStuff { ModuleA.methodA ModuleB.methodB } }object ModuleA { d…

Scala de Design Pattern: Builder

Builderパターン。package designpattern.builderimport scala.Enumerationsealed trait Animal { val value: String } object Lion extends Animal {val value = "Lion"} object Eagle extends Animal {val value = "Eagle"} object Human extends Animal {…

Scala de Design Pattern: Memento

Mementoパターン。 GoF23パターンのうち、パターン名がラテン語なのはこれだけ。 擬似乱数発生装置を作ってみた。 16bitの乱数を生成する。 アルゴリズムは混合合同法。 Seed値固定の場合はn番目に得られる数値はいつも同じ。 package designpattern.memento…

Scala de Design Pattern: Visitor

Visitorパターン。 Accepterをパターンマッチングで処理できるので、 Acceptor毎にvisitメソッドを定義しなくて良い。package designpattern.visitortrait Acceptor { def accept(visitor: Visitor) = visitor.visit(this) }case class AcceptorImpl1 extend…

Scala de Design Pattern: Interpreter

Interpreterパターン。 Wikipediaの例のパクり。 逆ボーランド記法の式のparse。 これくらいなら意外と簡単にできるもんなんすね。import scala.collection.mutable.Stacktrait Expression { def interpret(s: Stack[Int]) }class Num(number: Int) extends …

Scala de Design Pattern: Chain of Responsibility

Chain of Responsibilityパターン。 ケロロでやってみた。sealed abstract class 階級 { val 値: Int } object 軍曹 extends 階級 { val 値 = 6 } object 伍長 extends 階級 { val 値 = 5 } object 二等兵 extends 階級 { val 値 = 1 }trait ケロン星人 { va…

Scala de Design Pattern: State

Stateパターン。 Scalaのtraitでフィールドも抽象宣言できるのを使ってみた。trait State { val name: String val value: Int override def toString = "Name: " + name + " Value: " + value }object State1 extends State { val name = "State1" val value…

Scala de Design Pattern: Proxy

Proxyパターン。 クラスの関数へのコールをフックする。 Decoratorパターンと実装の形は似た感じに。trait Hoge { def doStuff: Unit }class HogeImpl extends Hoge { def doStuff = println("hoge") }trait Proxy extends Hoge { abstract override def doS…

Scala de Design Pattern: Mediator

Mediatorパターン行きます。 オブジェクト間のやりとりを仲立ちするMediatorを置くパターン。 下の例ではGroupにMemberが追加される毎に今までいたMemberがgreetする。 class Member(name: String) { override def toString = name def greet(guest: Member)…

Scala de Design Pattern: Prototype

Prototypeパターン。 ScalaでCloneableインターフェイスを実装するには@cloneableアノテーションを使う。 java.lang.Cloneable interfaceもしくはscala.collection.mutable.Clonaable traitをextendsする方法もある。 @cloneableアノテーションを用いた場合…

Scala de Design Pattern: Observer

Observerパターン。 trait Subject { var observerCollection = List[Observer]() def addObserver(o: Observer) def notifyObservers }trait Observer { def notify(value: Int): Unit }object Main { def main(args: Array[String]) = { val concreteSubje…

Scala de Design Pattern: Bridge

Bridgeパターン。trait Color { def getColor: String }trait White extends Color { def getColor = "白い" }trait Pink extends Color { def getColor = "桃色の" }abstract class Animal extends Color { println(this) override def toString = "私は" +…

Scala de Design Pattern: Command

Commandパターン。 あまりScalaっぽくない。trait Command { def execute: Unit }class CommandA extends Command { def execute = println("Execute CommandA") }class CommandB extends Command { def execute = println("Execute CommandB") }class Recei…

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もある。 これを使うと簡単…

Scala de Design Pattern: Singleton

Scalaでデザインパターンを実装してみようと思う。 ・GoF本(オブジェクト指向における再利用のためのデザインパターン ソフトバンククリエイティブ刊) ・Wikipedia ・Scala Wiki 辺りを参考に。 できるだけC++, Javaと比べてScalaっぽいことができるといい…

【読書】超・格差社会 アメリカの真実(小林由美 著 文春文庫)

超・格差社会 アメリカの真実(小林由美 著 文春文庫)を読んだ。 2006年に刊行された単行本の内容に、リーマンショックについての章を追加しての文庫版となる。中身を読む前は、格差社会の負の側面、アメリカ化する日本を批判する内容かと思ったが、読んで…

心無いEclipse 3.6 Helios

Scala IDE for Eclipse Heliosがリリースされたので、 Eclipse 3.5 GalileoからEclipse 3.6 Heliosに乗り換えた。 デザインがこれまでの地味なのとは正反対。なんていうかもうソレスタル。 流石Helios。太陽神なだけはある。 公式サイトは派手なのに起動画面…

Scala製テンプレートエンジンScalateを使ってみた

ScalateというScala製のテンプレートエンジンを見つけた。 http://scalate.fusesource.org/ http://github.com/scalate/scalate 特徴としては… WEBアプリじゃなくても単体で動く Servletとしても使用可能 Play-Frameworkと連携するplay-scalateというプロダ…

ScalaでJava2D

ScalaからJava2Dを使ってみた。 特にラッパークラスは無いようなので、特別なことはしていない。 HelloWorldと円を表示するだけの単純なサンプルを作ってみた。 package scala2dimport java.awt.{ Color, Graphics2D } import java.awt.geom._ import swing.…

Scalaでメモ帳(2) Redo Undoを付けてみる

昨日書いたScalaのメモ帳は最低限の機能しかなかったので、 Redo、Undo機能を付けてみた。 とは言ってもRedoManagerを使ってるだけっす。 アプリケーション本体にではなくて、JTextPaneにUndo、Redoの機能を追加した。 どうもScalaでActionMapみたいなことを…

Scalaでメモ帳

実用的で簡単なウィンドウアプリケーションっていったらメモ帳(テキストエディタ)ですよね! ってことでScalaで書いてみた。 うらがみさんの記事を参考にしてみた。 http://d.hatena.ne.jp/backpaper0/20091210/1260485413 メニューの項目の登録の仕方が色…

【受験記】Sun Certified Web Component Developer For Java EE5 (SJC-WC)

試験科目:SJC-WC(310-083) 試験時間:180分 問題数 :69 取得点 :75% 合格点 :70% 勉強時間:40時間 今までなんちゃってでServletで遊んできたけど、ちゃんと勉強しようと思って受験。 紫本を中心に勉強した。 問題集は秀和システムの『合格Java問題集 We…

Scala 2.8.0 final

__ ________ ___ / / ___ / __/ __// _ | / / / _ | __\ \/ /__/ __ |/ /__/ __ | /____/\___/_/ |_/____/_/ | | |/ そろそろfinalになるんじゃないかと思ってたらScala 2.8.0 finalリリース。 昨日言ってたSimpleSwingApplicationのScaladocも公式リファレ…