A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 0小菜鸟0 中级黑马   /  2014-7-19 22:02  /  1262 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 0小菜鸟0 于 2014-7-20 21:07 编辑

我知道java中的IO流,用了装饰者模式,但是我想自己用改怎么写呢?谁能写个demo,并简单讲解一下

3 个回复

倒序浏览
坐等楼下解答
回复 使用道具 举报
编写一个类,实现与被包装类相同的接口
定义一个变量,记住被包装对象的引用
定义构造方法,注入被包装对象的引用
对于要改写的方法,写你的代码
对于不需要改写的方法,调用原有对象的对应方法
以下的例子是为readLine这个方法添加行号的例子
public class MyBufferedReader extends BufferedReader{
        private int count = 1;
        public MyBufferedReader(BufferedReader br){
                super(br);
        }
        //先拿到原有对象的对应方法,判断其返回值后再进行包装
        public String readLine() throws IOException {
                String data = super.readLine();
                if(data==null)
                        return data;
                return count+++data;
        }
       
}
回复 使用道具 举报
public class Person {
        void eat(){
                System.out.println("吃饭");
        }
}

public class NewPerson{
        private Person p;
        public NewPerson(Person p) {
                this.p = p;
        }
        void eat(){
                System.out.println("开胃菜");
                p.eat();
                System.out.println("吃菜");
        }
}

继承多了,会导致继承体系臃肿,不够灵活。
继承的想法是让缓冲区和具体的对象进行结合。装饰设计模式是将缓冲进行单独的封装,与要缓冲的对象关联。

笔记内容,希望有所帮助,可以一起探讨。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马