JAVA小练习147——装饰者设计模式1(如果不使用装饰者设计模式而用继承实现需求)

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(如果不使用装饰者设计模式而用继承实现需求))