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方式中中文乱码问题前驱(一):装饰者模式再理解的更多相关文章

  1. servlet的xx方式传值中文乱码

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOEx ...

  2. 在Servlet中出现一个输出中文乱码的问题(已经解)。

    在Servlet中出现一个输出中文乱码的问题,已经解. @Override public void doPost(HttpServletRequest reqeust, HttpServletResp ...

  3. 解决docker容器中Centos7系统的中文乱码

    解决docker容器中Centos7系统的中文乱码问题有如下两种方案: 第一种只能临时解决中文乱码: 在命令行中执行如下命令: # localedef -i zh_CN -f UTF-8 zh_CN. ...

  4. PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码

    项目环境是php5.3.28 项目用的ThinkPHP3.2.3  已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...

  5. Windows下Git Bash中VIM打开文件中文乱码

    Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 admin@DESKTOP-O99620V MINGW64 /d/项目GGE/Hard_for_GGE (master) ...

  6. oracle中imp导入数据中文乱码问题(转)

    (转自  http://blog.chinaunix.net/uid-186064-id-2823338.html) oracle中imp导入数据中文乱码问题 用imp命令向oracle中导入数据后, ...

  7. 处理SecureCRT中使用vim出现中文乱码问题

    处理SecureCRT中使用vim出现中文乱码问题 引用原文:http://blog.chinaunix.net/uid-20639775-id-3475608.html因为cat没有问题,定位是vi ...

  8. 解决get方法传递URL参数中文乱码问题

    [转]解决get方法传递URL参数中文乱码问题 来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的) 在tomcat下, ...

  9. Servlet相关的几种中文乱码问题

    Servlet相关的几种中文乱码问题浏览器调用jsp,html等页面中文显示乱码使得文件本身以utf-8字符集编辑保存 让浏览器浏览器以utf-8字符集解析 在浏览器中右键选择编码格式为utf-8: ...

随机推荐

  1. Windows内核驱动--实现修改线程优先级demo

    在User下修改优先级比较麻烦,该驱动可以直接用线程ID,和优先级级数两个参数直接修改线程的优先级: Client代码: #include <Windows.h> #include < ...

  2. Leetcode:559. N叉树的最大深度

    Leetcode:559. N叉树的最大深度 Leetcode:559. N叉树的最大深度 Talk is cheap . Show me the code . /* // Definition fo ...

  3. IO流之节点流(字符流)和数据流关闭

    ​输入流----Reader 1 public class Reader { 2 public static void main(String[] args) throws Exception { 3 ...

  4. Skywalking-03:Skywalking本地调试

    live-demo 与 skywalking 源码联调 构建项目 找一个目录执行如下命令 git clone https://github.com/apache/skywalking.git # cl ...

  5. 第四篇--Beyond Compare4 试用期30天后

    30天后删除BCUnrar.dll这个文件,继续使用30天.还有就是注册表中regedit-->HEKY_CURRENT_USER-->Software-->Scooter Soft ...

  6. jvm源码解读--18 Java的start()方法解读 以及 wait 和notify流程图

    drawwed by 张艳涛 and get info from openjdk8 还有一个图

  7. C++ 定义默认值void locals_index(int reg, int offset = 1);

    看jvm源码的时候怎么也看不懂,来回看了几次了就是关于iload 6 指令的解析 def(Bytecodes::_lload , ubcp|____|____|____, vtos, ltos, ll ...

  8. 「Leetcode-算法_Easy461」通过「简单」题目学习位运算

    Easy 461.汉明距离 因为原题目翻译效果不佳,这里是笔者自己的理解. 输入两个二进制数 x.y, 输出将 y 变为 x 所需改变的二进制位数,成为汉明距离. 注意: 0 ≤ x, y < ...

  9. HCNA Routing&Switching之STP选举规则

    前文我们了解了二层环路对网络带来的影响,以及STP工作流程和BPDU数据包结构和相关字段的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15121317. ...

  10. CentOS的crond系统定时服务

    crond 服务管理 [root@node01 ~]# service crond start           (启动服务) [root@node01 ~]# service crond stop ...