io流用到的装饰者模式
装饰着模式又名包装模式。动态的给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类的方式更为灵活。
编码与解码使用的类型不一致,导致乱码问题
装饰着模式又称为包装模式,动态给对象添加额外职责,他比生成子类更加灵活
以动态的方式对象职责
处理那些可以撤职的职责
当采用生成子类的方法进行扩充时,可能有大量独立的扩展,为支持每一种组合产生大量的子类
为什么要使用装饰着模式
装饰着模式的概念和适应环境
装饰着的优缺点
装饰着的结构
装饰者模式的缺点
使用 new 关键字组合对象时,会产生很多的小对象,大量的小对象会占用内存空间
组合方式很多,很容易用错
装饰者模式的优点
相比于继承,更加灵活
装饰者模式是动态的,运行时可以修改;而继承是静态的,编译期时已经确定
通过使用不同的装饰类及对它们的排列组合,可以创造出许多不同行为的组合
解决乱码问题
先使用 ISO-8859-1 类型解码,再使用 UTF-8 类型编码
String username = request.getParameter("username"); byte[] bytes = username.getBytes("iso-8859-1"); username = new String(bytes, "utf-8");
编码与解码使用的类型不一致,导致乱码问题
例如,编码使用 UTF-8 类型,而解码使用 ISO-8859-1 类型时,就会出现乱码问题!
装饰者模式的类图结构
装饰者模式的结构
抽象组件(Component):给出一个抽象接口,以规范准备接收附加责任的对象
被装饰者(ConcreteComponent):抽象组件的具体实现,也就是我们要装饰的具体对象
装饰者组件(Decorator):持有组件(Component)对象的实例引用,该类的职责就是为了装饰具体组件对象,定义的基类
具体装饰(ConcreteDecorator):负责给构建对象装饰附加的功能
装饰者模式的应用场景
以动态的方式给对象添加职责
处理那些可以撤销的职责
当采用生成子类的方法进行扩充时,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长
什么是装饰者模式?
动态的给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类的方式更为灵活。
继承和装饰者模式有什么不同?
继承是在编译时,静态的添加额外的功能;装饰者是在运行时,动态的给对象添加额外的功能
装饰着模式的结构
装饰者模式流程图概念
装饰者模式流程图
装饰者模式结构2
装饰者模式的结构
666666666666666
装饰者模式=包装模式,动态的给一个对象添加一些而额外的职责,拓展性强
装饰模式对应示例
装饰者模式的结构
(1)抽象组件(Component):给出一个抽象接口,以规范准备接受附加责任的对象。
(2)被装饰者(ConcreteComponent):Component的具体实现,也就是我们要装饰的具体对象。
(3)装饰者组件(Decorator):持有组件对象的实例引用,该类的职责就是为了装饰具体组件对象,定义的基类。
(4)具体装饰(ConcreteDecorator):负责给构件对象装饰附加的功能。