• 设计模式之装饰模式


      装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。在Java IO流部分中,有不少带缓冲的IO流就采用了装饰模式。我们接下来看一个案例,主要是扩展IO流中的读写功能,实现对文件进行逐行读取,打印输出到控制台中时,让每行之间增加一行的间距。

      测试打印的文件为Dog.java:

    package decoratorModel;
    /**
     * 测试装饰模式用的文件
     */
    public class Dog implements Comparable<Dog>{
    	private String name;
    	private int age;
    	public Dog() {
    	}
    	public Dog(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	@Override
    	public String toString() {
    		return "Dog [name=" + name + ", age=" + age + "]
    ";
    	}
    	@Override
    	public int compareTo(Dog o) {
    		if(age>o.age){
    			return 1;
    		}
    		if(age<o.age){
    			return -1;
    		}
    		return name.compareTo(o.getName());
    	}
    }
    

      编写代码如下:

    package 装饰模式;
    /**
     * 为Reader扩展逐行读取的功能
     */
    import java.io.IOException;
    import java.io.Reader;
    
    public class BufferedReaderSuper {
    	private Reader reader;
    	//装饰Reader
    	public BufferedReaderSuper(Reader reader) {
    		this.reader=reader;
    	}
    	
    	private StringBuffer sb=new StringBuffer();
    	
    	public String readLine(){
    		sb.setLength(0);
    		int ch=0;
    		try {
    			while((ch=reader.read())!=-1){
    				char c=(char)ch;
    				sb.append(c);
    				if(c=='
    '){
    					break;
    				}
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		if(sb.length()==0){
    			return null;
    		}		
    		return sb.toString();
    	}
    	
    	public void close() {
    		try {
    			reader.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}	
    }
    -------------------------------------------
    package 装饰模式;
    /**
     * 测试类
     */
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    
    public class Test {
    	public static void main(String[] args) {
    		try {
    			BufferedReaderSuper brs=new BufferedReaderSuper(new FileReader("Dog.java"));
    			String str=null;
    			while((str=brs.readLine())!=null){
    				System.out.println(str);
    			}
    			brs.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

      执行测试类后,会发现在控制台上打印输出的文件内容,每行之间比原先增加了一个空行。

  • 相关阅读:
    章节1:SQL语言简易入门
    章节0:MySQl学前知识储备
    iOS 设置导航栏全透明
    IOS修改Navigation Bar上的返回按钮文本颜色,箭头颜色以及导航栏按钮的颜色
    iOS import导入时没有提示的解决办法
    iOSAPP开发项目搭建
    如何搭建iOS项目基本框架
    UIWebView中JS与OC交互 WebViewJavascriptBridge的使用
    iOS概念之KVO(Key-Value Observing)
    oc调javascript方法(evaluateJavaScript:)&&js给oc发通知
  • 原文地址:https://www.cnblogs.com/lizhangyong/p/8729495.html
Copyright © 2020-2023  润新知