Java之装饰设计模式

/*
 装饰设计模式:是一种将一个要加强的类的实例通过传入到一个类中并对其进行功能加强的设计模式.
  通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能.
*/

//本例是模拟BufferedReader对FileReader进行装饰.
import java.io.*;
class  MyBufferedReader
{
 //传入要加强的类实例.
 FileReader fr;
 MyBufferedReader(FileReader fr){
  this.fr=fr;
 }
 //其实BufferedReader类就是对FileReader类的装饰.FileReader只能单个字符进行读取.但我们装饰它的时候通过将读取的字符暂时存储在缓存区中.每读到一行后在进行输出.这是功能加强.
 public String myreadLine()throws IOException{
  int ch=0;
  StringBuilder sb=new StringBuilder();
  while ((ch=fr.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{
  fr.close();
 }
}
public class TestMyBufferedReader
{
 public static void main(String[] args)throws IOException{
  FileReader fr=new FileReader("TestMyBufferedReader.java");
  MyBufferedReader mbr=new MyBufferedReader(fr);
  String line=null;
  while ((line=mbr.myreadLine())!=null)
  {
   System.out.println(line);
  }
  mbr.myclose();
 }
}
/*
 装饰模式和继承的比较:
  装饰比继承更灵活,避免了继承体系的臃肿,而且降低了类与类之间的耦合度.
  装饰了因为增强了已有对象,具备的功能和原已有的是相同的,只不过提供了更强功能,所以装饰类和被装饰类通常是一个体系.
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值