import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/*
装饰者设计模式:
BufferedReader 对FileReader拓展了一个功能, readLine.
需求1 :编写一个类对BufferedReader的功能进行增强, 增强其readLine方法,返回数据带有行号。
需求2 :编写一个类对BufferedReader的功能进行增强, 增强其readLine方法,返回数据带有分号。
需求3 :编写一个类对BufferedReader的功能进行增强, 增强其readLine方法,返回数据带有双引号。
需求4 :编写一个类对BufferedReader的功能进行增强, 增强其readLine方法,返回数据带有行号+ 分号。
需求5 :编写一个类对BufferedReader的功能进行增强, 增强其readLine方法,返回数据带有行号+ 双引号。
需求6 :编写一个类对BufferedReader的功能进行增强, 增强其readLine方法,返回数据带有分号+双引号。
需求7 :编写一个类对BufferedReader的功能进行增强, 增强其readLine方法,返回数据带有行号+ 分号+双引号。
-----|BufferedReader
-----------| BufferedLineNum
-----------| BufferedSemi
-----------| BufferedQuto
-----------|
-----------|
-----------|
增强一个类 的功能:
通过继承增强一个类的功能的优点: 代码结构清晰、简单。
缺点: 代码不灵活,而且会导致继承体系过于庞大。
解决方案:使用继承,通过子类去增强其功能。
*/
//带行号的缓冲类。
class BufferedLineNum2 extends BufferedReader{
int count = 1 ;
public BufferedLineNum2(Reader in) {
super(in); //该句话只是为了让编译器编译不报错而已。
}
@Override
public String readLine() throws IOException {
String line = super.readLine(); //调用其父类的readLine方法, null
if(line==null){
return null;
}
line = count+":"+line;
count++;
return line;
}
}
//带有分号的缓冲类
class BufferedSemi2 extends BufferedReader{
public BufferedSemi2(Reader in) {
super(in);
}
@Override
public String readLine() throws IOException {
String line = super.readLine();
if(line==null){
return null;
}
line = line +";";
return line;
}
}
//带有双引号 的缓冲类
class BufferedQuto2 extends BufferedReader{
public BufferedQuto2(Reader in) {
super(in);
}
@Override
public String readLine() throws IOException {
String line = super.readLine();
if(line==null){
return null;
}
line = "\""+line+"\"";
return line;
}
}
public class Demo147 {
public static void main(String[] args) throws IOException {
File file = new File("F:\\Demo1.java");
//建立数据的输入通道
FileReader fileReader = new FileReader(file);
//建立缓冲输入流对象
BufferedLineNum2 bufferedLineNum = new BufferedLineNum2(fileReader);
BufferedSemi2 bufferedSemi = new BufferedSemi2(fileReader);
BufferedQuto2 bufferedQuto = new BufferedQuto2(fileReader);
String line = null;
while((line = bufferedQuto.readLine())!=null){
System.out.println(line);
}
}
}
JAVA小练习147——装饰者设计模式1(如果不使用装饰者设计模式而用继承实现需求)
最新推荐文章于 2021-02-27 02:34:49 发布