デザインパターン Prototype プログラミング Java

結城浩氏のPrototypeパターン 練習課題6-1の回答例

投稿日:

結城浩氏著作「Java言語で学ぶデザインパターン入門」
Prototypeパターン 練習課題6-1の回答例です。

課題の概要

UnderLinePen、MessageBoxクラスのcreateClone()を共通化する。

Template Methodに変更する例

Productインターフェースを、抽象クラスに変更します。
そして、createClone()メソッドを具象メソッド化することで共通化させます。

変更前(interface)

変更後(abstract class)

ProductクラスにcreateClone()を実装したため、
UnderLinePen、MessageBoxクラスのcreateClone()は削除します。

クラス図

concreteProductを作成する例

Productインターフェースはそのままにし、
新たに抽象クラス(ConcreteProduct)を作成します。

メソッドについては以下のようにします。
・use():継承先のクラス(UnderLinePen、MessageBox)で実装するため、抽象メソッドとする。
・createClone():共通化するために具象メソッドとする。

ConcreteProduct

UnderLinePen、MessageBoxの変更

ConcreteProductを継承し、createCloneメソッドを削除します。

クラス図

まとめ

どちらであっても抽象クラスで処理を共通化していることがわかると思います。
抽象クラスに置き換えたケースでは単純に処理を共通化しました。
ConcreteProductを作成したケースでも処理の共通化という点では同じですが、
他のConcreteクラスを追加できるようにしてあるという点で拡張性があります。

-デザインパターン, Prototype, プログラミング, Java
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

【Java】Stringのequalsで定数を左側にする理由

JavaのStringでequalsによる等価判定を行う場合に、 比較対象となる定数は左側にする理由はNullPointerExceptionを回避するためです。 以降、NullPointerExce …

【Java】MySQLから取得した日付をフォーマット変換して表示する方法

MySQLからSELECTしてきた日付データ(DateTime型)を、 「yyyy年MM月dd日 hh時mm分ss秒」のフォーマットで表示する方法です。 コード [crayon-5fbd900e443 …

no image

prepareステートメントの挙動について調べてみた

調べるきっかけ PHPでSQLをセキュアに記述する方法としてprepareステートメントが推奨されているが、なぜなのかがわからず、挙動を調べれば自分なりに納得のいく答えがでるのではないかと思ったため。 …

Springメモ(あれ、どうすんだっけ?)

@Autowiredアノテーションをつけることができる箇所(3つ) ・フィールド変数 ・コンストラクタの引数 ・setterの引数 ※引用 【後悔しないための入門書】Spring解体新書: Sprin …

no image

XSS対策の基本は入力値制限とサニタイジング(無害化)の2つ

XSS(クロスサイトスクリプティング)の基本的な対策は何をすればいいのかがぼんやりしている方向けの書いています。 対策方法はタイトルの通り、XSS(クロスサイトスクリプティング)対策の基本は入力値制限 …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。