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

映画のレイティング判定をStateパターンで実装する

投稿日:2020年5月30日 更新日:

ユーザが見ることができる作品を、映画のレイティングシステムに従って選別できるように実装します。

映画のレイティングシステムとは、年齢制限する規制のことです。
G:全年齢
PG12:12歳以上
R15+:15歳以上
R18+:18歳以上
といった区分があります。

 

メリット

・年齢制限をRatingSystemの実装クラス(G/PG/R15)に限定できる。(実装の局所化)
・R18映画を扱うことになり、仕様追加になっても容易に対応できる。(変更容易性)

 

クラス図

赤枠内がStateパターンで、それをUserが使用するという形をとっています。

RatingSystemをインターフェースとし、G/PG12/R15で各制限を実装します。
R18が無いのは、R18の映画を扱っていないという想定です。

 

ソースコード

interface RatingSystem

class G

class PG12

class R15

class Movie

class User

Main(実行)

実行結果

 

R18+の要件追加への対応

実務では仕様変更はよくあることです。
「R18の映画も扱うことにしたから、改修してもらえますか?」
と言われたら、すぐに変更できた方がいいですよね?

Stateパターンであれば、R18クラスを追加すれば完了です。
年齢制限の判定処理(if文)をあちらこちらから探してきて修正する必要はありません。

class R18

Main(実行)

実行結果

上記のUserの中で、R18映画(悪魔の毒々モンスター)を見ることができるのは、
18歳である「異世界転生した大学生」だけです。

 

まとめ

・状態による判定や機能を、特定のクラスに限定できる。(実装の局所化)
・仕様追加、変更に対する修正が比較的容易である。(変更容易性)
 

参考

映画のレイティングシステム
増補改訂版 Java言語で学ぶデザインパターン入門

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

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

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

ネストしたCollectionをflatmapで平坦化する例

概要 Java Goldの資格勉強をしていて、StreamのflatmapというメソッドでCollection等を平坦化(ネストした配列等を同階層の要素としてまとめること)の挙動で、3階層以上のネスト …

違い,diff,比較,天秤

【図解】Mockito – mock と spy の違いは?

テストコードでモックを書くときによく使うMockitoですが、mock()とspy()の違いについてよくわからないという方向けに図解で解説します。 図解 mock() ・全てのメソッドが一旦使用不可に …

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

結城浩氏著作「Java言語で学ぶデザインパターン入門」 Prototypeパターン 練習課題6-1の回答例です。 課題の概要 UnderLinePen、MessageBoxクラスのcreateClon …

【Java転職者向け】どんなポートフォリオを作成すべきか?

Javaプログラマとして開発リーダと新人教育をした立場から執筆しています。 対象読者 未経験からJavaプログラマに就職・転職しようとする方 目次 なぜポートフォリオを作成するのか? ・スキルアップ …

【Java入門】ラムダ式の基本構文と変数スコープ

概要 Javaにおけるラムダ式について解説します。 ラムダ式とは? OracleのJavaドキュメントに簡潔な説明があったので引用したいと思います。 Lambda expressions enable …

SpringFramworkの良書

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

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