装饰设计模式


1、简述

装饰模式(decoratr) 又名包装(Wrapper)模式,它是对已有对象的功能进行加强时定义的一个类,将已有对象传入,使其功能加强。是继承关系的一个替代方案 

2、装饰和继承的区别:

 装饰模式是一种动态行为,对已经存在类进行随意组合,而类的继承是一种静态的行为,一个类定义成什么样的,该类的对象便具有什么样的功能,无法动态的改变。因此,装饰模式比继承灵活,降低了类与类之间的关系。

B装饰模式扩展的是对象的功能,不需要增加类的数量,所以装饰类和被装饰的类通常都是属于一个体系。而类继承扩展是类的功能,在继承的关系中,如果我们想增加一个对象的功能,我们只能通过继承关系,在子类中增加两个方法。

示例:

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
 *自定义一个类来实现和readLine功能一样的方法
 * @author Administrator
 */
public class MyBufferedReader extends Reader
{
	private Reader r;
	public MyBufferedReader(Reader r)
	{
		this.r = r;
	}
	//可以一次读取一行数据的方法
	public String myReadLine() throws IOException
	{
		//定义一个临时容器,原bufferedreader封装的是字符数组
		//定义一个StringBuilder容器,因为最终还是要将数据变成字符串。
		StringBuilder sb = new StringBuilder();
		int ch = 0;
		while (-1 !=(ch = r.read()))
		{
			if (ch =='\r') //是\r就不存入缓冲区中,继续。
				continue;
			if (ch =='\n')
				return sb.toString();
			else 
				sb.append((char)ch); //存入缓冲区
		}
		//等于0 表示缓冲区中右数据
		if (sb.length() !=0)
		{
			return sb.toString();
		}
		return null;
	}
	/*
	 * 覆盖Reader类中的抽象方法
	 */
	public int read(char[] chuf,int off,int len) throws IOException
	{
		return r.read(chuf,off,len);
	}
	
	public void  close() throws IOException
	{
		r.close();
	}
	// 覆盖Reader类中的抽象方法
	
	//关闭程序
	public void  myClose() throws IOException
	{
		r.close();
	}
}

class MyBufferedReaderTest
{
	public static void main(String[] args) throws IOException
	{
		FileReader fr = new FileReader("C:\\buf.txt");
		
		MyBufferedReader myBuf = new MyBufferedReader(fr);
		
		String line = null;
		
		while (null != (line = myBuf.myReadLine()))
		{
			System.out.println(line);
		}
		myBuf.myClose();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值