Java学习之装饰者模式
一.装饰者模式(解耦 不让类和类产生继承的关系)
对 对象原有的功能进行升级
书写步骤:
1.明确被装饰的对象
2.将被装饰的对象 通过构造方法传入 装饰类
装饰类中 肯定有 一个成员变量 就是 被装饰的对象
3.拥有被装饰的对象 相当于可以调用该对象的所有方法
就可以对该方法进行升级。
public class Demo01 {
public static void main(String[] args) {
Student student = new Student();
LoStudent loStudent = new LoStudent(student);
loStudent.study();
}
}
// 学习的接口
interface Study{
void study();
}
// 在校学生
class Student implements Study{
@Override
public void study() {
System.out.println("在校学习了 C C++ C#");
}
}
//装饰类
class LoStudent implements Study{
//将被装饰者声明为成员变量
private Student student;
//提供有参的构造方法
public LoStudent(Student student) {
super();
this.student = student;
}
public LoStudent() {
super();
}
// 对方法进行装饰(升级)
@Override
public void study() {
// 调用原有方法
student.study();
//装饰新功能
System.out.println("学习Java H5 U3D");
}
}
二.打印流
-
1.永远不会抛IO异常
-
2.原样输出到目的端
-
PrintStream
构造方法: 字符串路径 文件对象 字节流对象 -
PrintWriter
构造方法: 字符串路径 文件对象 字节流对象 字符流对象 -
注意: 只有操作流对象 才能自动刷新
-
System in
BufferedInputStream -
System out
PrintStream
从控制台输入文字 写到文件中(可以写中文)
public class Demo04 {
public static void main(String[] args) throws IOException {
System.out.println("请输入:");
InputStream in = System.in;
// 使用转换流 将字节转字符
InputStreamReader isr = new InputStreamReader(in);
// 读一行 BufferedReader readline()
BufferedReader br = new BufferedReader(isr);
// 打印流原样输出 一次写一行文件
File file = new File("/Users/lanou/Desktop/Test/talang.txt");
FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw, true);
int num = 0;
//读写
String string = "";
while ((string = br.readLine()) != null) {
num++;
// 结束条件
if (string.equals("quit")) {
break;
}
// 写入文件
pw.println(num + ":" + string);
}
// 关闭资源
br.close();
pw.close();
}
}
三.合并流(字节流 任何文件都能合并)
SequenceInputStream(Enumeration<? extends InputStream> e)
作用:可以将多个文件合并成一个新的文件。
合并三个文件
SequenceInputStream(Enumeration<? extends InputStream> e)
将要合并的文件三个流 添加到vector
File f1 = new File("/Users/lanou/Desktop/Test/1.txt");
File f2 = new File("/Users/lanou/Desktop/Test/2.txt");
File f3 = new File("/Users/lanou/Desktop/Test/3.txt");
// 创建字节流 并将三个流添加到集合
Vector<FileInputStream> vector = new Vector<>();
vector.add(new FileInputStream(f1));
vector.add(new FileInputStream(f2));
vector.add(new FileInputStream(f3));
// 获取迭代器(枚举器)
Enumeration<FileInputStream> elements = vector.elements();
// 合并文件
SequenceInputStream sis = new SequenceInputStream(elements);
InputStreamReader isr = new InputStreamReader(sis);
BufferedReader br = new BufferedReader(isr);
File file = new File("/Users/lanou/Desktop/Test/5.txt");
FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw, true);
String string = null;
while ((string = br.readLine()) != null) {
// 写
pw.println(string);
}
br.close();
pw.close();
}