zoukankan      html  css  js  c++  java
  • 设计模式-装饰设计模式

    装饰设计模式:当需要对某些类功能进行增强时,可以把这个类的对象传到自定义类中,然后利用此对象具备的方法在此基础之上进行功能的增强。

    与继承的区别:扩展性强一些

    例如:有Reader类,我们可以读取text,读取meidia,一个继承体系形成如下:

    Reader

    |-TextReader

    |-MediaReader

    若继承来扩展功能的话,则会形成如下的继承体系

    Reader

    |-TextReader

      |-BufferTextReader

    |-MediaReader

      |-BufferMediaReader

    但是上面的BufferTextReader和BufferMediaReader都是缓冲的功能,若利用装饰类加上多态机制的话这样可以相称如下的体系

    Reader

    |-TextReader

    |-MediaReader

    |-BufferReader

    这样区别就显示出来了
    *装饰类可以避免继承的臃肿体系,减少代码的冗余度

    *装饰类一般为了增强某个类的功能,和这个类一般属于同一体系

    装饰类代码举例import java.io.*;class MyBufferedReader

    {
        private FileReader fileReader;
    
        public MyBufferedReader(FileReader fileReader)
        {
            this.fileReader = fileReader;
        }
    
        public String MyReadLine()throws IOException
        {
            StringBuilder sb = new StringBuilder();
    
            int readNum = 0;
            while((readNum = fileReader.read()) != -1)
            {
                char readChar = (char)readNum;
           if(readChar == ' ')
             continue;
    if(readChar ==' ') return sb.toString(); else sb.append(readChar); }      if(sb.length() != 0)//为了防止文件最后的一行没有回车,这样便会导致最后一行未返回
             return sb.toString();
    return null; } }

     此处说明: 与 的区别

    :确切意思是return,即返回到当前行的第一列即开头

    :确切意思应是新的一行,即类似回车

    :在windows中 的另一种形式

  • 相关阅读:
    将make的输出重定向到文件
    ubuntu mount u盘以及cp拷贝文件夹
    Emacs Tutorial摘录
    c#实现每隔一段时间执行代码(多线程)
    socket.BeginReceiveFrom异步接收信息时,回调函数无法正常进入
    23个C#实用技巧
    C#中实现Form的透明属性变化即渐隐效果
    C#键位定制:设置一个文本框只能输入数字键
    byte 与 bit 的转换
    C# Socket UDP 案例 2
  • 原文地址:https://www.cnblogs.com/fantasy01/p/3999576.html
Copyright © 2011-2022 走看看