黑马程序员---装饰类设计模式
2015-05-30 21:08
375 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
装饰模式比继承要灵活,避免了集成体系的臃肿
而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有的对象是相同的,
只不过提供了更强的功能,所以装饰类和被装饰类都是属于一个体系中。
BufferedInputStreamm也是一个装饰类,下面是我自定义的一个BufferedInputStreamm类,
把read()方法按照我们的想法实现出来
class MyBufferedInputStreamm
{
private InputStream in;
//将InputStream对象传给装饰类
MyBufferedInputStreamm(InputStream in)
{
this.in = in;
}
private int pos = 0;//定义一个指针,
private int count = 0;//定义一个计数器
private byte[] buf = new byte[1024];//定义一个字节数组
public int myRead()throws IOException
{
if (count==0)//判断计数器为零时,数组中没有数据,需要往里面存储
{
count = in.read(buf);
if (count<0)
{
return -1;
}
pos = 0;
byte b = buf[pos];
pos++;
count--;
return b&255;
}
else if (count>0)//判断数组中有对象,然后取出来,
//同时指针指向下一个数据,计数器减一,表示数据减少一个
{
byte b = buf[pos];
pos++;
count--;
return b&255;
}
return -1;
}
public void myClose()throws IOException
{
in.close();
}
}
装饰模式比继承要灵活,避免了集成体系的臃肿
而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有的对象是相同的,
只不过提供了更强的功能,所以装饰类和被装饰类都是属于一个体系中。
BufferedInputStreamm也是一个装饰类,下面是我自定义的一个BufferedInputStreamm类,
把read()方法按照我们的想法实现出来
class MyBufferedInputStreamm
{
private InputStream in;
//将InputStream对象传给装饰类
MyBufferedInputStreamm(InputStream in)
{
this.in = in;
}
private int pos = 0;//定义一个指针,
private int count = 0;//定义一个计数器
private byte[] buf = new byte[1024];//定义一个字节数组
public int myRead()throws IOException
{
if (count==0)//判断计数器为零时,数组中没有数据,需要往里面存储
{
count = in.read(buf);
if (count<0)
{
return -1;
}
pos = 0;
byte b = buf[pos];
pos++;
count--;
return b&255;
}
else if (count>0)//判断数组中有对象,然后取出来,
//同时指针指向下一个数据,计数器减一,表示数据减少一个
{
byte b = buf[pos];
pos++;
count--;
return b&255;
}
return -1;
}
public void myClose()throws IOException
{
in.close();
}
}
相关文章推荐
- 为什么程序员不擅长估算时间
- 黑马程序员——String类,包装类及List,Set集合
- 2015年阿里面试题——多线程(生产者消费者模型)
- 年轻程序员需要学习的5大经验
- 我也会成为一名合格的程序员。
- Java面试题第一天(一个源文件多个类,&和&&的区别)
- 黑马程序员——从类说开去,说开去,开去,去......
- 经典面试题集锦
- Java 40个集合面试问题和答案
- 黑马程序员--面向对象知识点总结(一)
- 黑马程序员——反射
- 面试题20:打印矩阵
- 打磨程序员的专属利器——命令行&界面
- 面试题19:二叉树的镜像
- 黑马程序员—基础学习 _常用类( 2)
- 黑马程序员—基础学习 _常用类( 1 )
- 面试题:throws和throw的区别
- 面试题18:树的子结构
- 面试题17:合并两个排序的链表
- 面试题15:输入一个链表,输出该链表中倒数第k个结点。