デザインパターン 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


関連記事

【Bootstrap】共通ヘッダーをナビバーとしてデザインしよう!

概要 ヘッダーをナビバーとして実装します。 (SpringBootチュートリアルの共通ヘッダーを基に解説していきます) また、デザインはBootstrapのサンプルを基にしていますので、 そちらも一度 …

AbstractFactoryパターンをenumで生成するメリット

AbstractFactoryパターンの説明には、実行時引数に文字列を渡したり、フラグでif-else判定する例をよく見かける。 しかし、どんなFactoryが生成可能を知らない担当者がFactory …

elseを使わないことでパフォーマンスが下がる場合の対処法

  状況 前回記事(なぜelse、else ifを書かないようにすべきなのか?)のような ifのみで判定されており、それがfor文等の繰り返し処理の中にある場合は パフォーマンスが下がる。 …

SpringでNotNullなどのバリデーションが効かないときの対処法

状況 フィールドに入っている値は空文字なのに、 @NotNull, @NotEmpty, @NotBlankでエラーとして検知されない。 (BindingResultでhasErroe=0件となる) …

【Java】ArrayListの最長文字列を取得する簡単な方法

(追記)2020/08/19 1. Listが空の場合(NoSuchElementException)に対応しました。 2. Nullが含まれていた場合、空文字として扱うように修正しました。 Arra …

記事を探す

SpringFramworkの良書

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

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