您的位置:首页 > 其它

包装设计模式(装饰设计模式)的使用

2016-09-16 19:18 477 查看
一、装饰

1、编写一个类,实现与被包装类(数据库驱动对Connection的实现)相同的接口。(使这个类和数据库的驱动实现有着相同的行为)

2、定义一个变量,引用被包装类的实例。

3、定义构造方法,传入被包装类的实例。

4、对于要改写的方法,编写自己的代码即可。

5、对于不需要改写的方法,调用原有对象的对应方法。

二、装饰变体(BufferedReader本身就是包装类,对Reader的包装。LineNumberReader,对BufferedReader的包装,还是他的子类)

1、编写一个类,继承已经是包装类的类。

2、定义一个变量,引用被包装类的实例。

3、定义构造方法,传入被包装类的实例。

4、覆盖掉需要改写的方法

例子(对BufferedReader的包装):

MyLineNumberReader.java文件:

import java.io.BufferedReader;
import java.io.IOException;

//对BufferedReader的readLine方法进行改写,输出行号
public class MyLineNumberReader extends BufferedReader{
private int count = 1;
public MyLineNumberReader(BufferedReader br){
super(br);
}
public String readLine() throws IOException {
String data = super.readLine();
if(data==null)
return null;
return (count++)+":"+data;
}
}


测试类Test.java:

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

public class Test {
public static void main(String[] args) throws Exception {

Reader reader = new FileReader("src/a.txt");
BufferedReader br = new BufferedReader(reader);
MyLineNumberReader lbr = new MyLineNumberReader(br);
String data = null;
while((data = lbr.readLine())!=null){
System.out.println(data);
}
br.close();
}
}


3.a.txt文件:

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


4。运行结果:

1:import java.io.BufferedReader;
2:import java.io.FileNotFoundException;
3:import java.io.FileReader;
4:import java.io.Reader;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息