javaにおけるデザインモード(装飾デザインモード)の実例を詳しく説明する。
javaにおけるデザインモード(装飾デザインモード)の実例を詳しく説明する。
アプリケーションシーン:
既存のオブジェクトを変更しない上で、既存のクラスのオブジェクトを一つまたは複数追加の機能を強化するために提供します。
字面から理解して、装飾して、家を飾ることができると思います。家はもとのものと見なされる。もう建てられた家を自分の考えに沿ってもう一度飾るのと同じです。継承はこのような機能を実現することもできますが、継承にはその欠点があり、継承は単一継承にすぎません。装飾デザインモードは様々な種類の異なる機能をとることができます。
具体的な手順:
◎第1ステップ:構造を通して、補強が必要なクラスを伝えます。(家を改装するなら、まず家がありますよね。これはよく分かります。
◎第2ステップ:具体的に必要な機能を書きました。
具体例とコード
MyBufferedReaderクラスを書いて、FileReader、InputStreamReader、PipedReaderなどのキャラクタストリームの機能を向上させます。
(1)バッファ付きのmyRead()方法を提供し、既存のread()方法を増速する。
(2)各ラインの文字を読み取ることができるマイナーライン()方法を提供します。
アプリケーションシーン:
既存のオブジェクトを変更しない上で、既存のクラスのオブジェクトを一つまたは複数追加の機能を強化するために提供します。
字面から理解して、装飾して、家を飾ることができると思います。家はもとのものと見なされる。もう建てられた家を自分の考えに沿ってもう一度飾るのと同じです。継承はこのような機能を実現することもできますが、継承にはその欠点があり、継承は単一継承にすぎません。装飾デザインモードは様々な種類の異なる機能をとることができます。
具体的な手順:
◎第1ステップ:構造を通して、補強が必要なクラスを伝えます。(家を改装するなら、まず家がありますよね。これはよく分かります。
◎第2ステップ:具体的に必要な機能を書きました。
具体例とコード
MyBufferedReaderクラスを書いて、FileReader、InputStreamReader、PipedReaderなどのキャラクタストリームの機能を向上させます。
(1)バッファ付きのmyRead()方法を提供し、既存のread()方法を増速する。
(2)各ラインの文字を読み取ることができるマイナーライン()方法を提供します。
import java.io.FileReader;
import java.io.IOException;
/**
* * 2: FileReader , :
* (1) myRead() , read() ;
(2) myReadLine() 。
*/
public class MyBufferedReader {
private char[] cbuf= new char[1024];//
private int pos=0; //
private int count=0;//
// FileReader ,
private FileReader r = null;
public MyBufferedReader(FileReader r) {
super();
this.r = r;
}
/**
*
* @throws IOException
* @return , -1
*/
public int myRead() throws IOException{
// buf[]
if(count<=0){
//System.out.println("**********");
count = r.read(cbuf);
if(count==-1){
return -1;
}
pos=0;
}
char ch = cbuf[pos];
pos++;
count--;
return ch;
}
// : \r 13
// :
10
public String myReadLine() throws IOException{
StringBuilder sb=new StringBuilder();
int ch=0;
//
while( (ch=myRead())!=-1){
if(ch=='\r'){
continue;
}
if(ch=='
'){
return sb.toString();
}
sb.append((char)ch);
}
if(sb.length()!=0){// ( )
return sb.toString();
}
return null;//
}
public void close() throws IOException{
r.close();
}
}
疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。