java设计模式(6) - 装饰设计模式
2015-08-06 20:56
465 查看
概述:在不改动类的原代码的情况下,对类的功能进行加强。
使用场景:当一个类的功能不够用时,可以写个子类去继承这个类,
然后能过构造方法把父类传进来。
重写父类方法。如下边的CharacterEncodingFilter 。
例1.
/**
* 鸭子类
* @author jiangwei
*
*/
public class YaZi {
public void execute() {
System.out.println("我会游泳");
}
}
=========================================
public class SuperYazi {
//1. 把鸭子定义成成员变量
private YaZi yazi;
public SuperYazi(YaZi yazi) {
//2.在yazi的构造方法中传入鸭子类
this.yazi = yazi;
}
public void execute() {
yazi.execute();
System.out.println("我会飞");
}
}
========================================
例2
public class CharacterEncodingFilter implements Filter{
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
MyCharacterEncodingRequest requestWrapper = new MyCharacterEncodingRequest(request);
chain.doFilter(requestWrapper, response);
}
public void destroy() {
}
}
class MyCharacterEncodingRequest extends HttpServletRequestWrapper{
public MyCharacterEncodingRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
private HttpServletRequest request;
@Override
public String getParameter(String name) {
try {
String value = this.request.getParameter(name);
if(value == null) {
return null;
}
if(!this.request.getMethod().equalsIgnoreCase("get")) {
return value;
}
value = new String(value.getBytes("ISO8859-1"), this.request.getCharacterEncoding());
return value;
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
使用场景:当一个类的功能不够用时,可以写个子类去继承这个类,
然后能过构造方法把父类传进来。
重写父类方法。如下边的CharacterEncodingFilter 。
例1.
/**
* 鸭子类
* @author jiangwei
*
*/
public class YaZi {
public void execute() {
System.out.println("我会游泳");
}
}
=========================================
public class SuperYazi {
//1. 把鸭子定义成成员变量
private YaZi yazi;
public SuperYazi(YaZi yazi) {
//2.在yazi的构造方法中传入鸭子类
this.yazi = yazi;
}
public void execute() {
yazi.execute();
System.out.println("我会飞");
}
}
========================================
例2
public class CharacterEncodingFilter implements Filter{
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
MyCharacterEncodingRequest requestWrapper = new MyCharacterEncodingRequest(request);
chain.doFilter(requestWrapper, response);
}
public void destroy() {
}
}
class MyCharacterEncodingRequest extends HttpServletRequestWrapper{
public MyCharacterEncodingRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
private HttpServletRequest request;
@Override
public String getParameter(String name) {
try {
String value = this.request.getParameter(name);
if(value == null) {
return null;
}
if(!this.request.getMethod().equalsIgnoreCase("get")) {
return value;
}
value = new String(value.getBytes("ISO8859-1"), this.request.getCharacterEncoding());
return value;
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
相关文章推荐
- 关于装饰设计模式的总结
- java---装饰模式
- 黑马程序员_I/O流(字符流)
- 黑马程序员——IO流
- 黑马程序员---Java 装饰设计模式
- 黑马程序员-装饰设计模式
- Java装饰类的设计思想
- 黑马程程序员--javaSE--javaIO流
- 装饰设计模式
- 黑马程序员---Java基础学习笔记(IO-后篇)
- 黑马程序员-->16_输入与输出I/O(提升篇)
- 装饰设计模式
- 【19】IO流2_读写缓冲区,装饰设计模式,图片拷贝,IO流操作规律及其他
- 【概念解析四】装饰和继承的区别?
- 装饰设计模式
- java 装饰设计模式
- 包装设计模式(装饰设计模式)的使用
- 装饰设计模式
- 二十、装饰设计模式
- 装饰模式设计原理