a)当某个类的某个方法不适应当前业务的需要
思路:
》扩展父类的可供扩展的方法,可以使有,但不优
》装饰设计模式(推荐)
1)写一个普通类或写一个普通类扩展[extends]一个父类
2)写一个需要被包装的实例变量
3)通过构造方式为被包装的实例变量赋值
4)对于不 满足需求的方法,重写父类的相关方法
5)对于满足需求的方法,直接调用被包装的对象 [可选]
package cn.xijie.decorator;
import java.io.BufferedReader;
/**使用Decorator设计模式为BufferedReader类的readLine方法添加行号的功能*/
//将BufferedReader进行必包的包装/装饰
public class MyBufferedReader {
private BufferedReader br;
private int no; //行号
public MyBufferedReader(BufferedReader br){
this.br = br;
}
//重写父对象的方法
public String readLine() throws Exception{
String line = null;
line = br.readLine();
if(line!=null){
no++;
line = no + ":" + line;
}
return line;
}
//直接使用父对象的方法
public void close() throws Exception{
br.close();
}
}
测试类:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import org.junit.Test;
import cn.xijie.decorator.MyBufferedReader;
public class DecoratorTest {
//readLine方法添加行号的功能。
@Test
public void DecoratorTST() throws Exception {
Reader r = new FileReader(new File("d:\\abc.txt"));
BufferedReader br = new BufferedReader(r);
MyBufferedReader mbr = new MyBufferedReader(br);
String line = null;
while ((line = mbr.readLine()) != null) {
System.out.println(line);
}
mbr.close();
}
}
原文地址:http://blog.51cto.com/357712148/2105490