解决servlet中get方式中中文乱码问题前驱(一):装饰者模式再理解

package day02;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
 * 装饰者模式
 * 这个例子是解决我们get方式乱码的前驱
 * 
 * @author mzy
 *
 */
public class DecoratorPatternDemo {
	/*
	 * 需求:
	 * 		我们对IO流的工具进行装饰,形成我们特有的方式
	 * 例如:
	 * 		给IO流加上行号
	 * 思考和实现:
	 * 		其实就是对BufferedReader中的readLine方法进行增强。
	 * 		做一个我们的BufferedReader类(MyBufferdReader):
	 * 			其中的bufferedReader就是被装饰类,MyBufferdReader就是装饰类
	 * 
	 * 装饰者模式的要求: 装饰者和被装饰者
	 * 		1.被装饰者不能是被final修饰的
	 * 		2.在装饰者类中定义一个成员变量来接收被装饰者类的对象。
	 * 		3.在装饰者类的构造方法中传入被装饰者类,使用前面定义的成员变量来存放被装饰者对象。
	 * 		4.在被装饰者类中重写被装饰者的方法来进行特定的增强。
	 */
	 public static void main(String[] args) throws Exception {
		/*
		 * 给BufferdReader前面加上行号
		 */
		 BufferedReader br = new BufferedReader(new FileReader("e:/news.txt"));
		 // 对BufferedReader进行装饰
		 BufferedReader reader = new MyBufferedReader(br);
		 
		 String str;
		 while((str=reader.readLine()) != null) {
			 System.out.println(str);
		 }
	}
}	
// 1. 首先确定了 不是final修饰的
// 装饰者:MyBufferedReader 被装饰者:BufferedReader
class MyBufferedReader extends BufferedReader {
	// 2.在装饰类中定义一个成员变量,用于接收被装饰者类的对象。
	private BufferedReader in;
	/*
	 * 3.在装饰者类中传入被装饰者的对象,使用定义的变量接收传入的被装饰者类。
	 */
	public MyBufferedReader(Reader in) {
		super(in);
		this.in = (BufferedReader)in;
	}
	
	int count = 1;
	/*
	 * 4.在装饰类中重写被装饰类方法,对其方法进行增强。
	 */
	@Override
	public String readLine() throws IOException {
		// 得到原来的真实的内容
		String content = in.readLine();
		
		if(content != null) {
			content = count+": "+content;
			count++;
		}
		return content;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36791569/article/details/80373671