1. 装饰者模式
为什么要实现装饰者模式?
动态的责任附加到对象上,若要拓展功能,装饰者提供了比继承更有弹性的替代方案;
装饰者和被装饰者之间必须是一样的类型,也就是拥有共同的超类,在这里应用继承并不是实现方法的复制,而是实现类型
的匹配. 因为装饰者和被装饰者,是同一个类型,因此装饰者可以取代被装饰者, 这样使被装饰者拥有装饰者独有的行为.
根据这个理念,我们可以在任何时候,实现新的装饰者增加新的行为.如果是继承,每当增加新的行为时候,就要修改原程序了
好处: 使用了装饰者模式之后,仅仅需要实现数个装饰者,然后根据需要自行组合就行了,结构清晰明了
非常适合拓展性很强的功能,
例如: Java的输入输出流, 使用了装饰者优于继承
装饰者模式的组成:
被装饰类---------Compoent类||原始接口|| 目标实现类,
比如java中 : 1:InputStream,接口及其直接子类: FileInputStream, ByteArrayInputStream,String|BufferInStream
2: OutputStream接口及其直接子类 : ByteArrayOutputStream、FileOutputStream
装饰者类----- InputStream的直接子类FilerInputStream类及其所有子类;
OutputStream的直接子类FilterOutStream类及其所有子类;
特点:
装饰者拥有被装饰者的对象, 一般当成构造参数传入;
在装饰者类中调用被装饰者的方法,封装成新的功能的方法;
2. LineNumberReader
LineNumberReader是BufferedReader的子类,可以使用readline()的方法读一行;
用String接收; 当String == null,时候读完文件;
3. 打印流 : 核心功能: 可以原样输出到目的端;
PrintStream 字节打印流
构造方法: 文件 字节输出流 路径
PrintWrite
构造方法: 文件 字节输出流 路径 字符输出流;
1. 练习从控制台输入从控制台接收;模拟scanner的方法;
//输入quit停止输入;
//利用System.in从控制台接收, 首先创建流对象;