装饰设计模式
a)当某个类的某个方法不适应当前业务的需要
思路:
扩展父类的可供扩展的方法, 可以使有, 但不优
装饰设计模式(推荐)
开发步骤:
)写一个普通类或写一个普通类扩展 [extends] 一个父类
)写一个需要被包装的实例变量
)通过构造方式为被包装的实例变量赋值
)对于不 满足需求的方法, 重写父类的相关方法
5)对于满足需求的方法, 直接调用被包装的对象 [可选]
- java
- 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://www.bubuko.com/infodetail-2567989.html