1.装饰者模式(设计模式)
1.可以对原来的的功能模式进行升级
BufferedOutPutStream 需要 OutPutStream构造 可以是FileOutPutStream
OBjectOutPutStream需要 OutPutStream构造 也可以是FileOutPutStream
2.装饰后功能升级 还可以写对象了
1.把被装饰者变成成员变量
2.构造方法中 给该成员变量赋值
3.对原有功能进行升级
3.其实继承也能达到这样的结果 name装饰者模式有啥好处
高内聚(类中方法直接的联系
低耦合(解耦)(类和类之间 尽量不要产生联系)
2.装饰学生类变成蓝鸥学生对学生技能进行提升代码演示
public class text {
public static void main(String[] args) {
LOStudent loStudent = new LOStudent(new Student());
loStudent.coder();
}
}
interface Coder{
public abstract void coder();
}
class Student implements Coder{
@Override
public void coder() {
System.out.println("c语音");
System.out.println("C++");
System.out.println("C#");
}
}
class LOStudent implements Coder{
private Student student;
public LOStudent() {
}
public LOStudent(Student student) {
super();
this.student = student;
}
@Override
public void coder() {
student.coder();
System.out.println("Java");
System.out.println("HTML");
System.out.println("Js");
}}
class LXStudent implements Coder{
private Student dent;
public LXStudent() {
}
public LXStudent(Student dent) {
super();
this.dent = dent;
}
@Override
public void coder() {
dent.coder();
System.out.println("挖掘机");
System.out.println("电竞");
}
}
2.LineNumberReader
1.特点: 能获取行号
2.利用装饰者模式实现 LineNumberReader
被装饰者 Reader
1.把 read()方法升级 读取
string Builder 进行字符串拼接
到遇到换行时 一行读取完毕\n 或者ASSCI 码表中的10
2.带行号
3.对关闭功能资源进行资源升级
2.LineNumberReader的简单实现
public class text {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("/Users/lanou/Desktop/Test/ppp.txt");
LineNumberReader lnr = new LineNumberReader(fr);
String string = "";
while ((string = lnr.readLine()) != null) {
System.out.println(lnr.getLineNumber());
System.out.println(string);
}
lnr.close();
}
}
3.模仿换行读取
public class text {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("/Users/lanou/Desktop/Test/ppp.txt");
Qunndam dam = new Qunndam(fr);
String string = "";
while ((string = dam.read()) != null) {
System.out.println(dam.getNumner() + ":" + string);
}
dam.Myclose();
}
/**
* @throws FileNotFoundException
* @throws IOException
*/
private static void fun1() throws FileNotFoundException, IOException {
FileReader fr = new FileReader("/Users/lanou/Desktop/Test/ppp.txt");
LineNumberReader lnr = new LineNumberReader(fr);
String string = "";
while ((string = lnr.readLine()) != null) {
System.out.println(lnr.getLineNumber());
System.out.println(string);
}
lnr.close();
}
}
class Qunndam{
private int numner = 0;
private Reader reader;
public Qunndam() {
}
public int getNumner() {
return numner;
}
public void setNumner(int numner) {
this.numner = numner;
}
public Qunndam(Reader reader) {
super();
this.reader = reader;
}
public String read() throws IOException {
numner ++;
StringBuffer stringBuffer = new StringBuffer();
String string = "";
int len = 0;
while ((len = reader.read()) != -1) {
if (len == 10) {
return stringBuffer.toString();
}else {
stringBuffer.append((char)len);
}}
if (stringBuffer.length() == 0) {
return null;
}
return stringBuffer.toString();
}
public void Myclose() throws IOException {
reader.close();
}
}
2.打印流(只能输出)
1.PrintStream(字节)
2.PrintWriter(字符)
构造方法可接受
1.文件(File)
2.字节输出流(OutPutStream)
3.文件路径
1.只能作为数据的目的地
2.可以吧数据原样输出
3.永远不会抛出IO异常 例如空指针
4.打印流 相当于可以给出其他的流对象装饰一个 原样输出的功能
System.out 是 PrintStream 打印输出字节流
作用:输出内容到控制台
3.测试打印流功能
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class text {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("/Users/lanou/Desktop/test/kkle.txt");
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
PrintStream ps = new PrintStream(bos);
ps.println("哈哈哈");
ps.print(true);
ps.print(3.5);
ps.print(100);
ps.write(100);
ps.print('p');
ps.close();
}
}
4.测试打印写入流
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class text {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("/Users/lanou/Desktop/test/kke.txt");
PrintWriter pw = new PrintWriter(file);
pw.println("哈哈哈");
pw.println(200);
pw.println(false);
pw.flush();
pw.close();
}
}
4.模仿Scanner类键盘输入打印功能
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class text {
public static void main(String[] args) throws IOException {
System.out.println("请输入内容");
InputStream in = System.in;
StringBuffer stringBuffer = new StringBuffer();
int len = 0;
while (true) {
if (stringBuffer.toString().equals("quit")) {
break;
}
len = in.read();
if (len == 10) {
System.out.println(stringBuffer.toString());
stringBuffer.delete(0, stringBuffer.length());
}else {
stringBuffer.append((char)len);
}
}
}
}