ようこそ。睡眠不足なプログラマのチラ裏です。

デザインパターン

F#でもオブジェクト指向したい。手始めにC#で書いたUndo,Redoの実装を移植してみました。あれ?F#にはprotectedアクセシビリティないの?ぐはぁ

F#は.NETの第一級言語だからオブジェクト指向だって余裕でできるよ関数型の考え方に基づいて、汎用的に使えるUndo,Redo機能の実装しようと考えたとき、 関数型言語のノウハウがない自分には、シックリくる良い案が全く思い浮かびませんでした。 F#は関数型パ…

Undo,Redoの実装って何回かしかやってない気がする。ジェネリックなCommandパターンとMementoパターンの応用で大体いけそうな気がする。

不足気味でしたので、たまにはC#分を補充しておきます。 ↓ ↑ もう1年近く前になるんですね。以前、下記のエントリが注目を浴びていて、 わたしも楽しく読ませてもらいました。 Undo,Redoの実装って何十回もやってる気がする - あしあと日記 http://d.hatena…

シリアル化可能なStateパターン的に使えるタイプセーフEnum。たぶん最終形態(フリーザ様的な意味で)

id:atsukanrockさん、トラックバックありがとうございます。 「 熱燗ロックのブログ - .NET Frameworkで、シリアル化可能なタイプセーフenumを実装する - その2」を受けまして、 さっそく、まねまねさせて頂まして、再びTypeSafeEnumを書き直しました。 そう…

C#で振舞いを抽象化してStateパターン的に使えるTypeSafeEnumを書いてみた。Delegate.DynamicInvokeのオーバーヘッドっていかほどなの?

以前書いたAbstractなTypeSafeEnumでは、振舞いについてFuncデリゲート固定として実装していました。 でもやっぱり、ちゃんとしたStateパターン的なTypeSafeEnumが欲しいよね。 というわけで、タイプセーフEnumの振舞いについてジェネリックで抽象化してみま…

イベントリスナが先にお亡くなりになっています。あれ?残念ながらメモリリークです。あのね、WeakEventパターンを使うといいと思うんだ。WeakEventManagerから派生して、抽象的なWeakEventTriggeredManagerクラスを作ってみよう。

WeakEvent パターン(msdn.microsoft.com)というのがあります。 WPFでごにょごにょしているような方であれば、ご存知の人も多いようですが、 WPFと無縁の人たちにとっては、認知度がかなり低いようです。 WeakEventパターン*1が有用となるシナリオは、なにもW…

ExpandableObjectConverterっていちいち実直に実装するのは面倒だよね。Reflectionを活用してネストしたプロパティを楽に量産してみよう。

ExpandableObjectConverterのサブクラスで実装する内容TypeConverterAttribute属性を用いて、ExpandableObjectConverterおよび、その派生クラスを指定することで プロパティグリッドにネスト表示されるプロパティを作成することができます。 通常、Expandabl…

デザインパターン第15回「Iteratorパターン」その2

以前書いた、デザインパターン第10回「Iteratorパターン」その1はこちらです。 以前書いたときは、ただ単にIEnumerableインターフェイスおよび、IEnumeratorインターフェイスを そのまま利用しただけの例について、イテレータパターンを学習しました。 今…

GoFなデザパタ小まとめ ちょっとした復習的な何か

■生成に関するパターン Singleton プログラム上、クラスのインスタンスが1つ(あるいは制限数ぶん)しかない事を保証し、 そのインスタンスにアクセスするためのグローバルな方法を提供する。 Builder 複合オブジェクトについて、その作成過程を表現形式に依…

デザインパターン第14回「Singletonパターン」その2

以前書いた、デザインパターン第7回「Singletonパターン」その1はこちらです。 結城先生のホームページに、Singletonのサブクラス化という記事がある。 Singletonの考え方にもいろいろあるけれど、その中の考え方のひとつ、 「(2) クラスごとに管理 ―― ク…

デザインパターン第13回「NullObjectパターン」

デスマプロジェクトに放り込まれて、かなりヤラレていますが、 久しぶりに独りよがりなデザパタ講座です。 今回はGoFデザインパターン以外のパターンを取り扱いたいと思います。 スマートにコードを表現することができ且つ、ケアレスなバグを減らす効能のあ…

デザインパターン第12回「Proxyパターン」

公私共にモチベーション低いですが、久しぶりに独りよがりなデザパタ講座です。 今回はGoFデザインパターンより、「Proxyパターン」をぬるーく解説します。 ■Proxyパターンの概要■ Proxyとは「代理人」という意味です。 現実の世界での「代理人」のイメージ…

デザインパターン第11回「Commandパターン」

随分と間が空きましたが、気が向いたので、久しぶりに独りよがりなデザパタ講座です。 今回はGoFデザインパターンより、「Commandパターン」をぬるーく解説します。 ■Commandパターンの概要■ Commandとは、「命令」を意味する言葉で、 コンピュータ用語とし…

デザインパターン第10回「Iteratorパターン」その1

後に書いた、デザインパターン第15回「Iteratorパターン」その2はこちらです。 なんだかんだで10回目を迎えましたデザパタ講座です。 さて今回は、GoFデザインパターンより「Iteratorパターン」をぬるーく解説します。 Iteratorパターンは、集約オブジ…

デザインパターン第9回「Decoratorパターン」

お久しぶりの、独りよがりなデザパタ講座です。 今回はGoFデザインパターンより、「Decoratorパターン」をぬるーく解説します。 Decoratorパターンは、実質的に継承と同じ機能を実現します。 ただ、継承に比べて結合度が低い分、このパターンでは柔軟な機能…

なぜデザインパターンを学習するのか

デザインパターンを学習する4つの理由 1.解決策の再利用 2.共通用語・共通認識の確立 3.個人々々のオブジェクト指向技術の向上 4.チームの開発効率の向上 1.解決策の再利用先人たちの経験や実績により、既に確立されている設計パターンを再利用す…

デザインパターン第8回「Visitorパターン」

独りよがりなデザパタ講座も、ようやくGoFデザパタ23種類の内の3分の1を超えました。 今回はGoFの23種類のデザインパターンの中でも、最大級のクラス図で表され、 比較的複雑な部類である「Visitorパターン」をぬるーく解説します。 このパターンの考…

デザインパターン第7回「Singletonパターン その1」

※デザインパターン第14回「Singletonパターン」その2はこちらです。 毎度恒例となりました、独りよがりなデザパタ講座。 今回はGoFデザインパターンの中から「Singletonパターン」をぬるーく解説します。 これは、一言で言うと、「1度作った1つのインス…

デザインパターン第6回「Compositeパターン」

今回はGoFデザインパターンの中から 「Compositeパターン*1」をぬるーく解説します。 オブジェクト指向開発を進めていくと、このパターンの考え方が必要となる場面は多いだろう。 つまり、プリミティブなオブジェクトと、コンテナオブジェクトを一様に扱いた…

デザインパターン第5回「Observerパターン」

今回はGoFデザインパターンの中から 「Observerパターン」をぬるーく解説します。 Observerパターンは、イベントとイベントリスナの背後にある一般的なパターン。 まさにオブジェクト指向の基礎段階でも十分に発想できるようなアイディアの1つなので、 この…

デザインパターン第4回「Strategyパターン」

今回はGoFデザインパターンの中から 「Strategyパターン」をぬるーく解説します。 もしこのパターンを知らないならば、このパターンを学ぶことを通して、 「インターフェイスの便利さ」を味わってもらえたらなあ、とか思う。 ■Strategyパターンの概要■ Strat…

デザインパターン第3回「Chain of Responsibilityパターン」

今回はGoFデザインパターンの中から 「Chain of Responsibilityパターン」をぬるーく解説します。 ■Chain of Responsibilityパターンの概要■ Chain of Responsibilityは、直訳すると「責任の鎖」です。 つまり、伝言ゲームのように責任(要求)を委譲し、 責任…

デザインパターン 第2回「Facadeパターン」

複数人の開発者で、オブジェクト指向言語を用いて1つのシステム開発を行う場合、 開発者は「クラスを作る人」と「クラスを使う人」という2つの立場を使い分けることになります。 開発者が「クラスを作る人」の立場に立ったときは、 クラスを使う人に楽をさ…

デザインパターン 第1回「FactoryMethodパターン」

デザインパターンとは、オブジェクト指向プログラミングにおいて 再利用可能な汎用的設計パターンのことを指します。 プログラマの世界では、様々なデザインパターンが知られていますが、 その中でもとりわけ有名なのが「GoFデザインパターン」です。 GoF(…