デコレーションモードで知っておきたいこと
1869 ワード
デコレーションモードで知っておきたいこと
装飾モードのUML図:
このことから、装飾モードの思想の中で最も重要な点は、装飾類と被装飾類が共通の親類の継承から来ており、装飾類が親類の引用を持っていることである.また、親はテンプレートメソッドモードを用いる、装飾クラスは抽象化のみを行う.専用の具体的な装飾類が実現されています.
Java ioクラスバッグには、装飾クラスの巧みな運用があります.Reader,BufferReader感謝する学生はその実現に注目することができる.
装飾モードのUML図:
public abstract class Display {
public abstract int getColumns();
public abstract int getRows();
public abstract String getRowText(int row);
// : ?
public final void show(){
for(int i=0;i<getRows();i++){
System.out.println(getRowText(i));
}
}
}
public class StringDisplay extends Display {
public String str;
public StringDisplay(String str) {
this.str = str;
}
@Override
public int getColumns() {
return str.length();
}
@Override
public int getRows() {
return 1;
}
@Override
public String getRowText(int row) {
if (row == 0) {
return str;
}
return null;
}
}
// : , Display
public abstract class Border extends Display {
protected Display dis;
protected Border( Display dis){
this.dis=dis;
}
}
//
public class SideBorder extends Border{
private char borderchar;
protected SideBorder(Display dis,char borderchar) {
super(dis);
this.borderchar=borderchar;
}
@Override
public int getColumns() {
return 2+dis.getColumns();
}
@Override
public int getRows() {
return dis.getRows();
}
@Override
public String getRowText(int row) {
return borderchar +dis.getRowText(row)+borderchar;
}
}
// :
Display d1=new StringDisplay("nihao");
d1.show();
Display d2=new SideBorder(d1,'@');
d2.show();
Display d3=new SideBorder(d2,'@');
d3.show();
:
nihao
@nihao@
@@nihao@@
このことから、装飾モードの思想の中で最も重要な点は、装飾類と被装飾類が共通の親類の継承から来ており、装飾類が親類の引用を持っていることである.また、親はテンプレートメソッドモードを用いる、装飾クラスは抽象化のみを行う.専用の具体的な装飾類が実現されています.
Java ioクラスバッグには、装飾クラスの巧みな運用があります.Reader,BufferReader感謝する学生はその実現に注目することができる.