设计模式——装饰模式

来源:互联网 发布:合肥市行知学校在哪 编辑:程序博客网 时间:2024/06/06 02:19

概述:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有对象的功能,并提供加强功能。那么自定义的该类,就成为装饰类。


与继承的区别:
 * 装饰模式比继承要灵活,避免了继承体系的臃肿,而且还降低了类与类之间的关系
 * 装饰类因为增强已有对象,具备的功能和已有对象是相同的,只不过是提供了更强的功能,所以装饰类和被装饰类通常都属于一个体系(父类、接口)中


例子:实现读取文件每次能够读一行,并且还能够记录行号

装饰增强后的类:

/** * 每次读取一行,并记录行号 */public class MyLineNumberReader {        private Reader reader;    /**记录行号*/    private int lineNumber;    /**     * 在构造方法中注入Reader     */    MyLineNumberReader(Reader reader) {        this.reader = reader;    }    /**     * 一次读一行的方法     */    public String myReadLine() throws IOException {        lineNumber++;        StringBuilder sb = new StringBuilder();        int ch = 0;        while((ch=reader.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;    }    public void myClose() throws IOException {        reader.close();    }    public void setLineNumber(int lineNumber) {        this.lineNumber = lineNumber;    }    public int getLineNumber() {        return lineNumber;    }}


测试类:
public class Test {    public static void main(String[] args) throws IOException {        FileReader fr = new FileReader("f:\\a.txt");        MyLineNumberReader mylnr = new MyLineNumberReader(fr);        String line;        while((line=mylnr.myReadLine())!=null) {            System.out.println(mylnr.getLineNumber()+":"+line);        }        mylnr.myClose();    }}

结果:(每一行都带有行号)
1:aaaaaaaa2:bbbbbbb3:ccccccc4:ddddddd




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二级建造师注册有效期过了怎么办 公司变更法人新刻法人章怎么办 个体户年报第一年忘了报怎么办 别人说娃名字起大了怎么办? 综英美我能怎么办我也很绝望 两个人不合适且结了婚怎么办 国税局寄来的邮件没收到怎么办 新疆办理暂住证有案底不办给怎么办 我的驾驶证吊销了车年审怎么办 好几个超速分不够扣了怎么办 刚拿c1驾照扣6分怎么办 别人开我车扣12分怎么办 办健康证大便拉不出来怎么办 欠信用卡钱被网上通缉抓到后怎么办 上海房子卖了户口没地方迁怎么办 没有户口本在北京身份证丢了怎么办 武汉科目四考试居住证过期了怎么办 农行卡密码输错3次怎么办 驾照罚款缴纳了网上没消怎么办 外地驾驶证分数扣12分了怎么办 有生产日期的赠品在超市过期怎么办 6年免检车辆逾期未年检怎么办 行驶证检验有效期过期2年怎么办 骑摩托车忘带驾驶证和行驶证怎么办 驾驶证逾期未审验怎么办有什么后果 车祸至人腿部骨折沒钱偿还的怎么办 我有c4驾驶证想办c3怎么办 驾驶证和行驶证被交警扣了怎么办 行驶证被交警弄丢了怎么办 没带行驶证让警察发现怎么办 首尔转机换票换乘怎么办过境签证 驾驶证约考帐号与登密码丢失怎么办 考驾照的时候预约密码忘了怎么办 考驾照的预约密码忘了怎么办 摩托车不能挂档不能摘挡了怎么办 身份证丢失了派出所不给挂失怎么办 快递员在中午还送货夏天怎么办啊 驾照一个记分周期扣满12分怎么办 佛山南海车管所怎么办替人消分流程 福州快处中心几流程要怎么办 被对方追尾了对方只有交强险怎么办