デザインパターン プログラミング 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


関連記事

【Java入門】Javaの開発環境を準備しよう!

概要 これからJavaの勉強をしようとする方向けにJavaの開発環境を準備する手順をご説明します。   環境構築 Eclipseのダウンロード IDE(統合開発環境)のEclipseをダウンロードしま …

【SpringBoot入門】#6~ 登録機能の実装

概要 画面から送信されたデータをDBに登録する機能を実装します。 入力データはバリデーションによってチェックされることとします。 サーバサイドは以下のように各層で処理分けされます。 <Contorol …

【Java】HashSet、LinkedHashSet、TreeSetの違い

概要 重複しないリストは、「Setに格納することで重複を除外してくれる」というのは多くの記事で紹介されています。 ここでは、Setに格納した後のデータの並び順も考慮したいという要件に対応するために、3 …

Jacksonで日付がずれる場合、Timezone設定を直す

現象 JacksonでCSV出力する際、日付がズレて出力される。   原因 タイムゾーンの設定がTokyo/Asiaになっていない。   対策 application.proper …

junit, テスト, junit5

【JUnit5】テストコードの基本

概要 JUnit5でテストコードを書く基本について学ぶ。 テストの命名規則 テストクラス、テストメソッドの記述には一般的な慣例があります。 ここではそれらを紹介しますが、実際にはプロジェクト内でのコー …

SpringFramworkの良書

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

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