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


関連記事

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

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

【Java】MapをStreamで処理する方法 7選!

概要 【Java】ListをStreamで処理する方法 7選! 【Java】SetをStreamで処理する方法 7選! に続き、Map編です。 Mapをstreamで扱う場合、entrySetまたはK …

【Java入門】Supplierの使い方まとめ

概要 Supplierとは供給者という意味です。 その名の通り、引数を取らずに戻り値を受け取ります。   基本的な使い方 Supplier<T> getメソッドによってT型の結果を受け取り …

正規表現で複数の箇所を入れ替える方法

複数の特定の箇所を入れ替えるテクニックです。 確認環境 Sakuraエディタ 置換方法 ここでは例として、:区切りの前後の文字列を入れ替えてみます。 置換前データ メニュー:AAA メニュー:BBB …

ユニークなListを持つファーストクラスコレクションの例

概要 正確に言うとListではなくSetです。 自分の確認と備忘録なのでご参考までに。 実装 ユニークなリストとしてSetで保持します。 Item 保持するオブジェクトです。 [crayon-647b …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

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

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