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

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

投稿日:

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

映画のレイティングシステムとは、年齢制限する規制のことです。
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言語で学ぶデザインパターン入門

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

執筆者:


comment

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

CAPTCHA


関連記事

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

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

フロントエンジニアとバックエンドエンジニアのどちらになるべきか?

対象読者 ・これからWebエンジニアを目指す人 ・フロントエンジニアとバックエンドエンジニアの違いを知らない人   フロントエンジニアかバックエンドエンジニアか? ・役割から考える フロント …

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

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

【Java】画像ファイルをバイナリで比較する方法

  画像ファイルの比較 比較元ファイル 素材はPhotoACから拝借しました。 コピー元画像:PCを持つ女性 コピーしたファイルとの比較(True) コピー元ファイルをコピーしただけのファイ …

no image

画面にonclickを書かずにイベントを発生させる方法

画面にonclickを記述すると、JavaScript側で関数名が変更になった際の修正が面倒になる。 なのでonclickを記述せずにイベントを発生させるように記述することが望ましいと子ドレビューで指 …

SpringFramworkの良書

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

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