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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kaifei2018 中级黑马   /  2016-4-6 22:59  /  237 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.heima.io;
/*装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。*/
class Person// 上机演示程序十六*****************************************************
{
        public void chifan() {
                System.out.println("吃饭");
        }
}
class SuperPerson {
        private Person p;
        SuperPerson(Person p) {
                this.p = p;
        }
        public void superChifan() {
                System.out.println("开胃酒");
                p.chifan();
                System.out.println("甜点");
                System.out.println("来一根");
        }
}
class PersonDemo {
        public static void main(String[] args) {
                Person p = new Person();
                // p.chifan();
                SuperPerson sp = new SuperPerson(p);
                sp.superChifan();
        }
}

案例二:
package com.heima.io;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/*明白了BufferedReader类中特有方法readLine的原理后,
可以自定义一个类中包含一个功能和readLine一致的方法。来模拟一下BufferedReader*/
class MyBufferedReader extends Reader
{
        private Reader r; // 上面继承了Reader后必须重写Reader中的抽象方法
        MyBufferedReader(Reader r)// 将FileReader 变成Reader能接受更多类型的对象
        {
                this.r = r;
        }
        // 可以一次读一行数据的方法。
        public String myReadLine() throws IOException { // 定义一个临时容器。原BufferReader封装的是字符数组。
                                                                                                        // 为了演示方便。定义一个StringBuilder容器。因为最终还是要将数据变成字符串。
                StringBuilder sb = new StringBuilder();
                int ch = 0;
                while ((ch = r.read()) != -1) {
                        if (ch == '\r')
                                continue;
                        if (ch == '\n')
                                return sb.toString();
                        else
                                sb.append((char) ch);
                }
                if (sb.length() != 0)//假如有一行没有回车换行,也要写回去
                        return sb.toString();
                return null;
        }
        /* 覆盖Reader类中的抽象方法。 */
        public int read(char[] cbuf, int off, int len) throws IOException {
                return r.read(cbuf, off, len);
        }
        public void close() throws IOException {
                r.close();
        }
        public void myClose() throws IOException {
                r.close();
        }
}
public class MyBufferedReaderDemo {
        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("xxx.txt");
                MyBufferedReader myBuf = new MyBufferedReader(fr);
                String line = null;
                while ((line = myBuf.myReadLine()) != null) {
                        System.out.println(line);
                }
                myBuf.myClose();
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马