読者です 読者をやめる 読者になる 読者になる

倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

これからの「Java I/O」の話をしようwww (9) : Files クラスのメソッド 〜ディレクトリの階層を走査〜

Java nio の API を見ていくシリーズ(目次)。 今回は、Files クラスに定義されている、ディレクトリ階層を走査するメソッドとそれに関連するクラス群を見ていきます。 java.nio では、ディレクトリ階層を走査す方法として、デザイン・パターンの1つである …

Groovy で Initialization On Demand Holder パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Initialization On Demand Holder パターン。 このパターンは static フィールドの遅延初期化 (lazy initializa…

Groovy で Double-checked Locking パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Double-checked Locking パターン。 このパターンは、複数のスレッドからアクセスされる可能性のあるフィールド…

Groovy で Active Object パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Active Object パターン。 これは別名 Actor パターンとも呼ばれるので、GPars の Actor を使っての実装を試み…

Groovy で Thread-Specific Storage パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Thread-Specific Storage パターン。 このパターンは java.lang.ThreadLocal を使えば実装できます。 あんまり …

Groovy で Two-Phase Termination パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Two-Phase Termination パターン。 このパターンでは、スレッドを終了したいときにいきなり止めるのではなく、…

Groovy で Future パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Future パターン。 このパターンでは、「引換券を、お先にどうぞ」と言うのが的を射ているように、まだ終わって…

Groovy で Worker Thread パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Worker Thread パターン。 Worker Thread パターンも java.util.concurrent パッケージのクラスを使えば実装す…

Groovy で Thread-Per-Message パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Thread-Per-Message パターン。 このパターンは、メッセージ(リクエスト)が送られてきたら、それに対して1つ…

Groovy で Read-Write Lock パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Read-Write Lock パターン。 このパターンも Java SE 5 で導入された java.util.concurrent パッケージ(正確に…

Groovy で Producer-Consumer パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Producer-Consumer パターン。 Producer-Consumer パターンはやるべき仕事を見つけることとその仕事を実行する…

Groovy で Balking パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Balking パターン。 前回見た Guarded Suspension パターンでは、(キューが空になったり空きができたりなどの…

Groovy で Guarded Suspension パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Guarded Suspension パターン。 Guarded Wait, Spin Lock などとも呼ばれるそうです。このパターンは java.util…

Groovy で Immutable パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、の続き。 今回は Immutable パターン。 状態が変わらないオブジェクトは、いつどのようにスレッドからアクセスされても…

Groovy で Single Thread Execution パターン その2

以前、Single Thread Execution パターンを GPars の Actor を使って書き換えてみました。 そこでは門の役割をする Gate クラス自体を Actor のサブクラスである DefaultActor を使ってスレッドセーフな実装にしていました。 ただし、クラスをスレッドセーフ…

Groovy で Single Thread Execution パターン その1

Groovy でのマルチスレッド・プログラミングを練習するために、『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』にあるマルチスレッド・プログラミングのデザインパターンを Groovy/GPars で書いてみます。今回は「Single Thread Execut…

Client 役

デザインパターンの書籍に載っているクラス図や役割を見ていて、Client 役(クラス)があったりなかったりするので、有無を票にしてみました。特に「振る舞いに関するパターン」にはあるとかといったものは無いかな。 とりあえず、「AbstractXxxx」と「Concr…

「GoF デザインパターン」アノテーション (23) : Visitor パターン

さぁ、ラストの Visitor パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Visitor パターンの登場人物 @Visitor → 型 elementType : Class @Visit → メソッド @ConcreteVisitor → 具象クラス visitorType : Class @Element…

「GoF デザインパターン」アノテーション (20) : State パターン

今回は State パターン(一覧)。 Wikipedia (English) LePUS3 and Class-Z State パターンの登場人物 @Context → 型 stateType : Class @StateInstance → フィールド @State → 型 @ConcreteState → 具象クラス stateType : Class アノテーション定義 上記の…

「GoF デザインパターン」アノテーション (19) : Observer パターン

今回は Observer パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Observer パターンの登場人物 @Subject → 型 observerType : Class @Observers → フィールド @AddObserver → メソッド @DeleteObserver → メソッド @Notif…

「GoF デザインパターン」アノテーション (18) : Memento パターン

今回は Memento パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Memento ・・・記念の品,形見; 思い出の種Memento パターンの登場人物 @Caretaker → 型 mementoType : Class @Originator → 型 mementoType : Class @CreateMemento → メソッ…

「GoF デザインパターン」アノテーション (22) : Template Method パターン

今回は Template Method パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Template Method パターンの登場人物 @AbstractClass → 型 @TemplateMethod → メソッド @PrimitiveMethod → メソッド method : String @ConcreteCl…

「GoF デザインパターン」アノテーション (21) : Strategy パターン

今回は Strategy パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Strategy パターンの登場人物 @Context → 型 strategyType : Class @StrategyInstance → フィールド @Strategy → 型 @ConcreteStrategy → 具象クラス stra…

「GoF デザインパターン」アノテーション (17) : Mediator パターン

今回は Mediator パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Mediator パターンの登場人物 @Mediator → 型 colleagueType : Class @CreateColleagues → メソッド @ColleagueChanged → メソッド @ConcreteMediator → 具象クラス mediatorT…

「GoF デザインパターン」アノテーション (16) : Iterator パターン

今回は Iterator パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Iterator パターンの登場人物 @Aggregate → 型 iteratorType : Class @CreateIterator → メソッド @ConcreteAggregate → 具象クラス aggregateType : Class…

「GoF デザインパターン」アノテーション (15) : Interpreter パターン

今回は Interpreter パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Interpreter パターンの登場人物 @Context → 型 expressionType : Class @AbstractExpression → 型 @Interpret → メソッド @TerminalExpression → 型 expressionType : Cla…

「GoF デザインパターン」アノテーション (14) : Command パターン

今回は Command パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Command パターンの登場人物 @Command → 型 @Execute → メソッド @ConcreteCommand → 具象クラス commandType : Class @ReceiverInstance → フィールド @Receiver → 型 concret…

「GoF デザインパターン」アノテーション (13) : Chain of Responsibility パターン

今回は Chain of Responsibility パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Chain of Responsibility パターンの登場人物 @Handler → 型 @Next → フィールド @Request → メソッド @ConcreteHandler → 型 handlerType : Class Client → …

「GoF デザインパターン」アノテーション (12) : Proxy パターン

今回は Proxy パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Proxy パターンの登場人物 @Subject → 型 @RealSubject → 型 subjectType : Class @Proxy → 型 subjectType : Class @RealSubjectInstance → フィールド @Cli…

「GoF デザインパターン」アノテーション (11) : Flyweight パターン

今回は Flyweight パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Flyweight パターンの登場人物 @FlyweightFactory → 型 flyweightType : Class @Pool → フィールド @GetFlyweight → メソッド @Flyweight → 型 @Concrete…

「GoF デザインパターン」アノテーション (10) : Facade パターン

今回は Facade パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Facade パターンの登場人物 @Facade → 型 @Client → 型 facadeType : Class アノテーション定義 上記の定義の具体的な Java コード。 public final class FacadePattern { priva…

「GoF デザインパターン」アノテーション (9) : Decorator パターン

今回は Decorator パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Decorator パターンの登場人物 @Component → 型 @CreateComponent → 具象クラス componentType : Class @Decorator → 型 componentType : Class @Compone…

「GoF デザインパターン」アノテーション (8) : Composite パターン

今回は Composite パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Composite パターンの登場人物 @Component → 型 @Add → メソッド @Remove → メソッド @GetChild → メソッド @Leaf → 型 componentType : Class @Composit…

「GoF デザインパターン」アノテーション (7) : Bridge パターン

今回は Bridge パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Bridge パターンの登場人物 @Abstraction → 型 implementorType : Class @ImplementorInstance → フィールド @Implementor → 型 abstractionType : Class @C…

「GoF デザインパターン」アノテーション (6) : Adapter パターン

今回は Adapter パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z LePUS3 and Class-Z Adapter パターンの登場人物 @Target → 型 @Adapter → 型 targetType : Class @AdapteeInstance → フィールド @Adaptee → 型 targetTyp…

「GoF デザインパターン」アノテーション (2) : Builder パターン

今回は Builder パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Builder パターンの登場人物 @Director → 型 builderType : Class @builderInstance → フィールド @Construct → メソッド @Builder → 型 @BuildPart → メソッド @ConcreteBuild…

「GoF デザインパターン」アノテーション (1) : AbstractFactory パターン

今回から、GoF 本に載っているデザインパターンについて、役割をマークするアノテーションを定義していってみましょう(一覧)。今回は AbstractFactory パターン。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z AbstractFactory パターン…

「GoF デザインパターン」アノテーション (5) : Singleton パターン

今回は Sigleton パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Singleton パターンの登場人物 @Singleton → 型 @Instance → フィールド @GetInstance → メソッド アノテーション定義 上記の定義の具体的な Java コード。 package org.waman…

「GoF デザインパターン」アノテーション (4) : Prototype パターン

今回は Prototype パターン(一覧)。 Wikipedia (English) Prototype パターンの登場人物 @Prototype → 型 @CreateClone → メソッド @ConcretePrototype → 具象クラス prototypeType : Class @Client → 型 prototypeType : Class アノテーション定義 上記の…

「GoF デザインパターン」アノテーション (3) : Factory Method パターン

今回は Factory Method パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Factory Method パターンの登場人物 @Framework → パッケージ @Creator → 型 productType : Class @FactoryMethod → メソッド @PrimitiveMethod → …

アノテーションでデザインパターンの役割をマークする (8):「Iterator パターンの役割マーク」改善の試み 其ノ参

今回の改善は、型に付加するアノテーションにパラメータを定義して、協調する役割(型)や関係のある役割(型)を指定できるようにすることです。例えば Iterator パターンにおいて、Aggregate は Iterator を生成しますが、Iterator の役割をするインターフ…

アノテーションでデザインパターンの役割をマークする (6):「Iterator パターンの役割マーク」改善の試み 其ノ壱

今回は、前回行った「『Java 言語で学ぶデザインパターン入門(結城浩)を参考にしてみる』」の続き。 少々、改善を試みます。改善点 今回改善を試みる箇所は、「Iterator と ConcreteIterator、Aggregate と ConcreteAggregate の間でメソッドに付加するア…

アノテーションでデザインパターンの役割をマークする (7):「Iterator パターンの役割マーク」改善の試み 其ノ弐

今回は、前回の問題点の解決法をチョットだけ違った形で。改善点 前回の解決方法「ConcreteXxxx アノテーションに定義されている子アノテーションを除去する」に加えて、@ConcreteIterator, @ConcreteAggregate アノテーションに代えて @Iterator.Concrete, …

アノテーションでデザインパターンの役割をマークする (5):『Java 言語で学ぶデザインパターン入門』(結城浩)を参考にしてみる

以前に『アノテーションでデザインパターンの役割をマークする』ってな記事を書きました。 そこでは、定型のデザインパターンで役割を担っているクラスなどにアノテーションでマーク付けをしようという試みでした。ところで、デザインパターンと言えばやはり…

アノテーションでデザインパターンの役割をマークする (4):クラス・ベース

最後は「クラス・ベースの実現」。 ほどんど「インターフェース・ベースの実現」と同じですが、インターフェースの代わりに(ユーティリティー)クラスを用いているところが違います。 『Effective Java 第2版 (The Java Series)』で「定数インターフェース…

アノテーションでデザインパターンの役割をマークする (3):インターフェース・ベース

今回は「インターフェース・ベースの実現」。 この方法は定数インターフェースパターンと同じようなところがあるので、あまり良くないかと。アノテーションの実装 「インターフェース・ベースの実現」では、デザインパターン名と同じ名前のインターフェース…

アノテーションでデザインパターンの役割をマークする (2):enum ベース

今回は「enum ベースの実現」。 これは役割を指定するための列挙型を別途作成して、アノテーションの引数として使用する方法です。 この enum ベースの方法は、他の3つとチョット感じが違います。アノテーションの実装 「enum ベースの実現」では、 デザイン…

アノテーションでデザインパターンの役割をマークする (1):パッケージ・ベース

今回は「アノテーションでデザインパターンの役割をマークする」ための一番素直な実現、「パッケージ・ベースの実現」。 これは、1つのデザインパターンをマーキングするのに必要なアノテーションを1つのパッケージにまとめます(うーむ、当たり前?) 当然…

アノテーションでデザインパターンの役割をマークする (0):準備

デザインパターンやフレームワーク、イディオムなどを使用する際、どのクラスやメソッドがどの役割を果たしているのかってのを分かりやすくするためにアノテーションを使ってはどうか?と思い、チョット試してみました。「アノテーションを読み込んで処理を…