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; } }
解决servlet中get方式中中文乱码问题前驱(一):装饰者模式再理解
猜你喜欢
转载自blog.csdn.net/qq_36791569/article/details/80373671
今日推荐
周排行