Java Console Game 〜コマンドを腐る程作る〜
イントロダクション
前回は、プロパティファイルを読み込む処理の実装をやりました。これにより、以下の事が可能になります。
1. キーにより中の値を取得する
2. つまり、文書を表示する時にロケール(ホームページなどにアクセスしてきたユーザーの国)により、英語、日本語を切り替えて表示する事も可能です。
3. 作成、学習中のコンソールアプリではコマンドに使用します。キー=コマンドとして、キーに対して色んな処理を呼び出す方法を使います。
その他、アイディア次第でいくらでも出来る事が増えます。
インターフェース
以前、リストを使ったコマンド(dir)の作成時にインターフェースを使用しました。
前回の段階では、別のクラスを1つの変数で使用出来ると記載しましたが、詳細については触れませんでした。作り方に関してはこちら
しかし一度は使って見た事があれば、インターフェースの理解も難しくないであろうと思いますので、記載します。
「インターフェースを利用するとクラスをカテゴリ毎にまとめる事が出来る」という事が今回の記載したい事です。
クラスのカテゴライズ
クラスをカテゴリ別に分類するとどんなメリットがあるでしょうか? 例えば、今現在(2019/08/14)実装しようと考えているのは「腐る程コマンドを大量生産する」ということです。 ここでのカテゴライズは「コマンド」です。「コマンドでカテゴリわけ」するということは。。。
コマンド実行する
上記の一言でいろんなコマンドが実行できれば「カテゴリわけ」の意味があると思います。 しかし、クラスを別々に作成すれば、それは別モノ。。。「なんとかならないの?」という思いに応えてくれる仕組みが「インターフェース」です。具体的には以下のように実装します。
/** コマンドインターフェース */ public interface Command { /** 実装するメソッド */ public void execute(): } /** 実装クラス1 */ public class Cd implements Command { public void execute() { System.out.println("CDコマンド"); } } /** 実装クラス2 */ public class Dir implements Command { public void execute() { System.out.println("Dirコマンド"); } } /** 実装クラス3 */ public class IpConfig implements Command { public void execute() { System.out.println("ipconfigコマンド"); } } ・ ・ ・
上記のような形でインターフェースを実装してやると。。。
public static void main(String[] args) { Command cd = new Cd(); cd.execute(); Command dir = new Dir(); dir.execute(); Command ipconfig = new IpConfit(); ipconfig.execute(); Command[] cmds = {cd, dir, ipconfig}; for(Command cmd : cmds) { cmd.execute(); } }
なんて実装も可能です。
早い話が
インターフェースを使えば、インターフェースを実装(implements)したクラスは全部インターフェースの抽象メソッドを実行できるということです。 なんか当たり前な感じですが。。。 インターフェースは、抽象メソッドのみを持っていて処理内容がありません。なのでインターフェースを実装するクラスは抽象メソッドを実装する必要があります。(実装しないとビルドエラーが出ます)
この実装を行う前に、クラスのリファクタリングをやりますので、その後に実装したものをアップロードしたいと思います。 でわでわ。。。