javaday45_IO流5_装饰者模式、lineNember、字节流
来源:互联网 发布:捕鱼达人 h5源码 编辑:程序博客网 时间:2024/05/29 16:57
1.内容:
/**
* 定义:装饰着设计模式:
* 当堆一组对象的功能进行增强时,就可以使用该模式进行问题的解决,实质上是基于原来对象的,只是一种增强
*
*
* 装饰和继承都能实现一样的特点:
* 进行功能的拓展增强
*
* 有什么区别呢?
*
* Writer
* |--TxtWriter :用于操作文本
* |--MediaWriter:用于操作媒体
*
* 想要对操作的动作做进行效率的提高
* 按照面向对象的思想,可以通过继承对具体的进行功能的拓展
* 效率提高需要缓冲技术
*
* Writer
* |--TxtWriter :用于操作文本
* |--BufferedTxtWriter: 加入了缓冲技术的操作文本的对象
* |--MediaWriter:用于操作媒体
* |--BufferedTxtWriter: 加入了缓冲技术的操作文本的对象
*
*到这里就哦了,但是这样做好像并不理想
* 如果这个体系进行功能拓展,又多了流对象,那么这个流要提高效率,是不是也要产生子类呢?是
* 这时就会发现,只为提高功能进行的继承,导致继承体系越来越臃肿,不够灵活 继承他就得产生关系
*
* 重新思考:
* 既然加入的都是同一种技术--缓冲
* 前一种是让缓冲和具体的流对象相结合
* 可不可以将缓冲进行单独的封装,那个对象需要缓冲就将那个对象和缓冲关联
*
* class buffer{
* Buffer(TextWriter w){
* }
* Buffer(Mediawriter m){
* }
* }
*
* 父类更靠谱
* class BufferWriter externds Writer{
* Buffer(writer w){
* }
* }
*
* * Writer
* |--TxtWriter :用于操作文本
* |--MediaWriter:用于操作媒体
* |--BufferWriter:提高效率的写
*
* 发现:装饰要比继承灵活
* 特点:装饰类和被装饰类都必须所属同一个接口或者父类
* */
2.装饰设计模式,PersonDemo
package java_Studing_day45_IO流5_装饰设计模式;
public class persondemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p=new Person();
//p.eat();
NewPerson np=new NewPerson(p);
np.eat();
np.runcar();
System.out.println("**********************************************");
NewPerson2 np2=new NewPerson2();
np2.eat();
}
}
class Person{
public void eat(){
System.out.println("吃饭");
}
}
//这个类的出现是为了增强Person这个类而出现的 装饰设计模式
class NewPerson{
private Person p;
NewPerson(Person p){ //构造函数传入Person对象进行增强
this.p=p;
}
public void eat(){
System.out.println("开胃酒");
p.eat();
System.out.println("甜点");
}
public void runcar(){
System.out.println("开跑车");
}
}
//继承设计模式
class NewPerson2 extends Person{
public void eat(){
System.out.println("开胃酒");
super.eat();
System.out.println("甜点");
}
}
3.lineNemberReader的使用
package java_Studing_day45_IO流5_装饰设计模式;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.LineNumberReader;
public class lineNumberReader {
private static final String Line_Menber = System.getProperty("line.separator");//获取系统换行符
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileWriter fw=new FileWriter("lineNumberReader.txt");
fw.write("sdfsadfeaLine_Men\nbersdgfsdLine_Men\nberrersdfgesdLine_M\nenbernbergrsdfLinen_Menbe\nrerdgsrgLinenMenbe\nrnbersrgsdgLine_Men\nberenbergsewgsdfgs");
fw.flush();
FileReader fr=new FileReader("lineNumberReader.txt");
LineNumberReader lnr=new LineNumberReader(fr);//获取行号的缓冲
String line=null;
lnr.setLineNumber(100);//设置行号开始编号
while((line=lnr.readLine())!=null){
System.out.println(lnr.getLineNumber()+":"+line);//打印行号和缓存内容
}
lnr.close();
}
}
4.字节流Demo和常用的缓存方式选择
package java_Studing_day45_IO流5_字节流;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
demo_write();
read();
}
//读
public static void read() throws IOException{
//创建一个读取流对象,和指定文件关联
FileInputStream fis=new FileInputStream("Bytedemo1.txt");
//第4种,获取刚好大小的数组做容器
System.out.println(fis.available());
byte[] buf=new byte[fis.available()];
fis.read(buf);
System.out.println(new String(buf));
//第3种方式,自定义Byte数组容器当做缓存容器读取
// byte[] buf=new byte[1024];
// int len=0;
// while((len=fis.read(buf))!=-1){
// System.out.println(new String(buf,0,len));
// }
//第2种方式,系统缓存读
// int ch=0;
// while((ch=fis.read())!=-1){
// System.out.println((char)ch);
// }
//第1种方式,一次读取一个字节
//int ch=fis.read();
//System.out.println(ch);
fis.close();
}
//写
public static void demo_write() throws IOException {
//1.创建字节输出流对象,用于操作文件
FileOutputStream fos=new FileOutputStream("Bytedemo1.txt");
//2.写数据,直接写入到了目的地中
fos.write("abcdefg".getBytes());
//fos.flush();//现在没什么用,只有在缓冲区有用
fos.close();//关闭资源的动作还是要用的
}
}
- javaday45_IO流5_装饰者模式、lineNember、字节流
- 装饰设计模式_装饰和继承的区别_字节流_读取键盘录入
- 黑马程序员_十五 【字节流】【装饰模式】【LineNumberReader】
- 装饰者模式在Java 字节输入流中的应用
- Java基础19:缓冲区;装饰模式;字节流;字符流
- java笔记-IO流-装饰设计模式、字节流
- 从装饰设计模式角度学习JavaIO字节流
- 设计模式06_装饰者模式
- 设计模式_装饰者模式
- 设计模式_装饰者模式
- 【GOF23设计模式】_装饰模式_IO流底层架构_装饰和桥接模式的区别JAVA240
- IO_打印流_装饰设计模式JAVA161-162
- javascript设计模式_第二部分_装饰者模式
- java基础_设计模式_装饰者模式
- 黑马程序员_装饰者模式
- 黑马程序员_装饰者模式
- 设计模式_装饰模式
- 黑马程序员--字符流缓冲区对象,装饰设计模式,字节流,字节流的缓冲区对象,转换流对象
- android简单实现比分条
- hdu 4431 Mahjong (模拟)
- linux send与recv函数详解
- caffe添加自己的层
- UWP -- Background Task 深入解析
- javaday45_IO流5_装饰者模式、lineNember、字节流
- 【java基础知识】this 与 static 关键字
- ZSTUOJ 4273: 玩具(尺取+STL set) 然后回顾了下RMQ和线段树
- DNS,IP
- POJ
- C 语言 数据操作
- 【OJ二分06】月度开销
- IO中同步、异步与阻塞、非阻塞的区别
- logstash 服务启动脚本