流的分类:
按内容分:字节流(InputStream|OutputStream)和字符流(Reader|Writer)
按功能分:输入流和输出流
按形式分:实体流(节点流)和装饰流(处理流)
实体类(节点流):直接操作数据源的流
装饰流(过滤流):装饰流不可以直接操作数据源,必须构建的实体流或其他装饰流的基础上
Decorator模式:
又名包装(Wrapper)模式。
装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
装饰模式通过创建一个包装对象,也就是装饰,来包裹真实的对象。
装饰模式以对客户端透明的方式动态地给一个对象附加上更多的责任。
装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。
装饰模式的角色:
抽象角色:InputStream|OutputStream|Reader|Writer
具体角色:FileInputStream (实体流)(被装饰对象)
装饰角色:FilterInputStream
可以发现:静态代理模式和装饰模式上在语法形式上几乎完全一样,那么它们的区别在哪里呢
相同点:都是为被代理(被装饰)的类扩充新的业务。
不同点:代理模式具有控制被代理类的访问性质,而装饰模式仅仅是单纯的扩充被装饰的类,为所装饰的对象增强功能(方法)。所以区别仅仅在是否对被代理/被装饰的类进行了控制而已。
其实,它们的着重点一个在于“增加”职责,另一个在于“控制”访问。这是它们最本质的区别。
由此可以看到:学习设计模式重点在于“语义”上把握,而不是追求它的"形式"。
序列化:实现Serializable接口
ObjectInputStream
ObjectOutputStream
克隆方式生成对象:实现Cloneable接口
反序列化和克隆不会调用构造函数生成对象!
按内容分:字节流(InputStream|OutputStream)和字符流(Reader|Writer)
按功能分:输入流和输出流
按形式分:实体流(节点流)和装饰流(处理流)
实体类(节点流):直接操作数据源的流
装饰流(过滤流):装饰流不可以直接操作数据源,必须构建的实体流或其他装饰流的基础上
Decorator模式:
又名包装(Wrapper)模式。
装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
装饰模式通过创建一个包装对象,也就是装饰,来包裹真实的对象。
装饰模式以对客户端透明的方式动态地给一个对象附加上更多的责任。
装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。
装饰模式的角色:
抽象角色:InputStream|OutputStream|Reader|Writer
具体角色:FileInputStream (实体流)(被装饰对象)
装饰角色:FilterInputStream
可以发现:静态代理模式和装饰模式上在语法形式上几乎完全一样,那么它们的区别在哪里呢
相同点:都是为被代理(被装饰)的类扩充新的业务。
不同点:代理模式具有控制被代理类的访问性质,而装饰模式仅仅是单纯的扩充被装饰的类,为所装饰的对象增强功能(方法)。所以区别仅仅在是否对被代理/被装饰的类进行了控制而已。
其实,它们的着重点一个在于“增加”职责,另一个在于“控制”访问。这是它们最本质的区别。
由此可以看到:学习设计模式重点在于“语义”上把握,而不是追求它的"形式"。
序列化:实现Serializable接口
ObjectInputStream
ObjectOutputStream
克隆方式生成对象:实现Cloneable接口
反序列化和克隆不会调用构造函数生成对象!