一,装饰器模式概述
装饰器模式是一种代替继承的技术,无需增加子类就能扩展对象功能。用对象的关联关系代替继承关系。更加灵活
**二,装饰器模式UML类图
三,装饰器模式代码例子
Component接口
public interface Person {
void show();
}
ConcreteComponent
public class Me implements Person{
@Override
public void show() {
System.out.println("我什么都没穿");
}
}
抽象装饰类
public class AbstractClothes implements Person {
Person person;
public AbstractClothes(Person person) {
this.person = person;
}
@Override
public void show() {
person.show();
}
}
具体装饰类
public class Hat extends AbstractClothes{
public Hat(Person person) {
super(person);
}
@Override
public void show(){
person.show();
say();
}
private void say() {
System.out.println("我带上了帽子");
}
}
public class Shoes extends AbstractClothes {
public Shoes(Person person) {
super(person);
}
@Override
public void show() {
person.show();
say();
}
private void say() {
System.out.println("我穿上了鞋子");
}
}
public class Shoes extends AbstractClothes {
public Shoes(Person person) {
super(person);
}
@Override
public void show() {
person.show();
say();
}
private void say() {
System.out.println("我穿上了鞋子");
}
}
测试类
public class Test {
public static void main(String[] args) {
new Shoes(new Hat(new Me())).show();
}
}
四,装饰器模式在IO中的应用
装饰器模式在java体现的最典型的就是IO了。
FilterInputStreanm和FilterOutputStream用来提供 装饰器类接口以控制特定输入流和输出流。这两个类是装饰器的必要条件。
左边是InputStream的装饰体系,右边是Reader的装饰体系。
它们之间通过InputStreamReader关联起来。