HiLineEditor概要
基本動作
1.
2.
3.
基本オブジェクト
1.text :
2.buffertext :
3.cmd :
4.director :
5.cb :
1
HiLineEditor概要
基本動作
1.入力文字列(コマンド)を取得
2.
3.
基本オブジェクト
1.text :
2.buffertext :
3.cmd :
4.director :
5.cb :
2
HiLineEditor概要
基本動作
1.入力文字列(コマンド)を取得
2.この文字列からコマンド用オブジェクトを作成
3.
基本オブジェクト
1.text :
2.buffertext :
3.cmd :
4.director :
5.cb :
3
HiLineEditor概要
基本動作
1.入力文字列(コマンド)を取得
2.この文字列からコマンド用オブジェクトを作成
3.このオブジェクトの処理用メソッドを実行
基本オブジェクト
1.text :
2.buffertext :
3.cmd :
4.director :
5.cb :
4
HiLineEditor概要
基本動作
1.入力文字列(コマンド)を取得
2.この文字列からコマンド用オブジェクトを作成
3.このオブジェクトの処理用メソッドを実行
基本オブジェクト
1.text : 編集対象用
2.buffertext :
3.cmd :
4.director :
5.cb :
5
HiLineEditor概要
基本動作
1.入力文字列(コマンド)を取得
2.この文字列からコマンド用オブジェクトを作成
3.このオブジェクトの処理用メソッドを実行
基本オブジェクト
1.text : 編集対象用
2.buffertext : コピー,カット&ペースト用
3.cmd :
4.director :
5.cb :
6
HiLineEditor概要
基本動作
1.入力文字列(コマンド)を取得
2.この文字列からコマンド用オブジェクトを作成
3.このオブジェクトの処理用メソッドを実行
基本オブジェクト
1.text : 編集対象用
2.buffertext : コピー,カット&ペースト用
3.cmd : コマンド用オブジェクト
4.director :
5.cb :
7
HiLineEditor概要
基本動作
1.入力文字列(コマンド)を取得
2.この文字列からコマンド用オブジェクトを作成
3.このオブジェクトの処理用メソッドを実行
基本オブジェクト
1.text : 編集対象用
2.buffertext : コピー,カット&ペースト用
3.cmd : コマンド用オブジェクト
4.director : 処理用メソッド起動用オブジェク
5.cb :
8
HiLineEditor概要
基本動作
1.入力文字列(コマンド)を取得
2.この文字列からコマンド用オブジェクトを作成
3.このオブジェクトの処理用メソッドを実行
基本オブジェクト
1.text : 編集対象用
2.buffertext : コピー,カット&ペースト用
3.cmd : コマンド用オブジェクト
4.director : 処理用メソッド起動用オブジェク
5.cb : コマンド用オブジェクト作成用オブジェ
9
オブジェクトの宣言
public static void main(String[] args) {
//ディレクター
Director director = new Director();
// 編集対象用
LinkedList<String> text = new LinkedList<String>();
// カット,コピー,ペースト用バッファ
LinkedList<String> buffertext = new LinkedList<String>();
BufferedReader Reader = new BufferedReader...
//コマンド用オブジェクトを作成するオブジェクト
CommandBuilder cb = null;
// コマンド用オブジェクト
COMMAND cmd = COMMAND.NOCOMMADOP;
10
mainメソッド処理概要
do {
try{
// コマンド作成用オブジェクト(ビルダーパターン)
cb = new CommandBuilder(text,buffertext,Reader);
// コマンドオブジェクト取得
cmd = cb.getCommand();
// コマンド実行(ディレクターパターン)
director.executeCommand(cmd,text,buffertext,Reader);
}catch (Exception e) {
System.out.println("I can't understand the command.");
e.printStackTrace();
System.out.println("Back to the console.");
continue;
}
}while(!cmd.equals(COMMAND.QUITOP));
11
入力文字列とオブジェクトの対応付
け
今回は,Type Safe Enumを利用する.
enum COMMAND {
QUITOP(new QuitEditor()),
HELPOP(new Help()),
OTHERSOP(new Others()),
ERROROP(new CommandError()),
NOCOMMADOP(new NoCommand()),
OP(new NoCommand())
;
private Command com;
private COMMAND(Command c){this.com=c;}
public void setCom(Command c){this.com=c;}
public Command getCom(){return com;}
static String getPostfix(){return "OP";}
}
12
helpを入力したら...
class CommandBuilder{
private Command cmdmethod=new NoCommand();
private COMMAND command=COMMAND.NOCOMMADOP;
CommandBuilder(LinkedList<String> text,LinkedList<String> buffertext,Buffered
System.out.print("Enter a command > ");
String inputstr = br.readLine();
String[] cmdArgs = inputstr.split(" ");
//大文字,小文字にかかわらず大文字に変換され,
//COMMAND.getPostfix()が付加される.
//COMMAND.getPostfix()は,常に”OP”を返す.
//列挙型のインスタンスを生成する.
command = COMMAND.valueOf(cmdArgs[0].toUpperCase()+COMMAND.getPo
cmdmethod = command.getCom();
cmdmethod.setArgs(inputstr,text,buffertext);
}
//列挙型のインスタンスを返す.
COMMAND getCommand(){
return command;
}
}
13
helpを入力したら...
class CommandBuilder{
private Command cmdmethod=new NoCommand();
private COMMAND command=COMMAND.NOCOMMADOP;
CommandBuilder(LinkedList<String> text,LinkedList<String> buffertext,BufferedReader b
System.out.print("Enter a command > ");
String inputstr = br.readLine();
String[] cmdArgs = inputstr.split(" ");
//大文字,小文字にかかわらず大文字に変換され,
//COMMAND.getPostfix()が付加される.
//COMMAND.getPostfix()は,常に”OP”を返す.
//列挙型のインスタンスを生成する.
command = COMMAND.valueOf(cmdArgs[0].toUpperCase()+COMMAND.getPostfix());
cmdmethod = command.getCom();
cmdmethod.setArgs(inputstr,text,buffertext);
}
//列挙型のインスタンスを返す.
COMMAND getCommand(){
return command;
}
}
列挙型でその値がHELPOPであるインスタンスが生成される
14
helpを入力したら...
15
helpを入力したら...
列挙型でその値がHELPOPである
インスタンスが生成される!
16
helpを入力したら...
列挙型でその値がHELPOPである
インスタンスが生成される!
...あとは,メソッドを実行する
17
処理を制御
・
・
・
class Director {
public void executeCommand(COMMAND cmdop,...
Command Cmd =cmdop.getCom();
Cmd.printHeader();
Cmd.Process();
Cmd.printFooter();
}
}
18
処理を制御
・今後の実装する機能も考え,自由度を持たせておく
・
・
class Director {
public void executeCommand(COMMAND cmdop,...
Command Cmd =cmdop.getCom();
Cmd.printHeader();
Cmd.Process();
Cmd.printFooter();
}
}
19
処理を制御
・今後の実装する機能も考え,自由度を持たせておく
・処理を制御するdirector(現場監督)を用意する.
・.
class Director {
public void executeCommand(COMMAND cmdop,...
Command Cmd =cmdop.getCom();
Cmd.printHeader();
Cmd.Process();
Cmd.printFooter();
}
}
20
処理を制御
・今後の実装する機能も考え,自由度を持たせておく
・処理を制御するdirector(現場監督)を用意する.
・directorにメソッドを実行してもらう.
今後は,オブジェクトの値により,メソッド変更する.
ただし,text等を処理するメソッド名は,統一して
class Director {
public void executeCommand(COMMAND cmdop,...
Command Cmd =cmdop.getCom();
Cmd.printHeader();
Cmd.Process();
Cmd.printFooter();
}
}
21
Helpの場合
HELPOP生成時のコンストラクタの引数に
Helpがあるため,
Command Cmd =cmdop.getCom();
でcmdにはHelpが代入される.
よって
Cmd.printHeader();
Cmd.Process();
Cmd.printFooter();
は,Helpインスタンスの
printHeader();
Process();
printFooter();
が順に実行される.
22
メソッドの実行順
すなわち(1),(2),(3)の順で実行され
public void printHeader(){
System.out.println("Help...");←(1)
}
public void printFooter(){←(3)
System.out.println("End Of Help");
}
public void Process(){←(2)
System.out.println("Add");
System.out.println("Add n");
System.out.println("Print");
System.out.println("Print n");
23
Quitが入力された場合
・
・
24
Quitが入力された場合
・今回は何もしないインスタンス
→黙って終了します.
・
25
Quitが入力された場合
・今回は何もしないインスタンス
→黙って終了します.
・もし終了処理を入れたければ,Helpと同様に
printHeader();
Process();
printFooter();
の順に実行されるので,適切なところに処理を
追加すればよい.
26
RC1
print,saveが使えるようにソースコードを埋めよ.
PrintText
public void Process(LinkedList<String> text){
//ここから穴埋め
//ここまで
}
27
RC1
print,saveが使えるようにソースコードを埋めよ.
SaveText
public void Process(LinkedList<String> text){
ArrayList<String> subtext = new ArrayList<String>(text
printPrompt();
===省略===
//穴埋めここから
//ここまで
bw.close();
osw.close();
fos.close();
}
28
RC1
print,saveが使えるようにソースコードを埋めよ.
Director
public void executeCommand(COMMAND cmdop,LinkedList<String> text,
LinkedList<String> buffertext,BufferedReader reader) throws Exception{
Command Cmd =cmdop.getCom();
Cmd.printHeader();
switch(cmdop){
// 穴埋めは,ここから
// ここまで
default:
throw new HLEException();
}
Cmd.printFooter();
}
29
RC2ヒント
・LinkedListでは,subListメソッドが利用できるので
使いましょう.
・拡張forループ(foreach)を使いましょう.
・必要なら,Processメソッド内で新たに
LinkedList<String>
を宣言し,利用しましょう.
・sortには,Tree系のコレクションが有効
・clear,addALLの利用も考えて見ましょう.
30
ダウンロード

HiLineEditor概要