码迷,mamicode.com
首页 > 其他好文 > 详细

Decorator设计模式的实现中 装饰设计模式学习笔记

时间:2018-04-19 18:20:10      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:Decorator设计模式的实现中 装饰

装饰设计模式

a)当某个类的某个方法不适应当前业务的需要
思路:
》扩展父类的可供扩展的方法,可以使有,但不优
》装饰设计模式(推荐)

开发步骤:

1)写一个普通类或写一个普通类扩展[extends]一个父类
2)写一个需要被包装的实例变量
3)通过构造方式为被包装的实例变量赋值
4)对于不   满足需求的方法,重写父类的相关方法

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();
    }

}

Decorator设计模式的实现中 装饰设计模式学习笔记

标签:Decorator设计模式的实现中 装饰

原文地址:http://blog.51cto.com/357712148/2105490

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!