装饰器模式

装饰器模式

主要对象:

  • 接口
  • 被装饰的对象(接口的实现)
  • 装饰器超类
  • 装饰器

对象之间的关系图:
这里写图片描述

装饰器和被装饰的对象有两个特点,也是装饰器模式的关键:

  • 他们实现同一个接口;
  • 装饰器中使用了被装饰的对象。

使用装饰器模式的几个关键点:

  • 装饰器和被装饰类要实现同一个接口(实际开发中也可能用继承)。
  • 装饰器中的方法可以调用被装饰对象提供的方法,以此实现功能累加的效果。

使用示例:

//接口
public interface Fruit {

    public void show();

    public int statNumber();
}

//接口的实现类(被装饰的对象)
public class Apple implements Fruit {
    @Override
    public void show() {
        System.out.print("苹果:");
    }

    @Override
    public int statNumber() {
        return 0;
    }
}

//装饰器超类
public abstract class Decorator implements Fruit {

    protected Fruit fruit;

    public Decorator(Fruit fruit){
        this.fruit = fruit;
    }
}

//装饰器
public class BlueDecorator extends Decorator {

    public BlueDecorator(Fruit fruit){
        super(fruit);
    }

    @Override
    public void show() {
        fruit.show();
        System.out.print("一个蓝色的 ");
    }

    @Override
    public int statNumber() {
        return this.fruit.statNumber() + 1;
    }
}

//测试类
public class DecoratorTest {
    public static void main(String[] args){
        Fruit apple = new RedDecorator(new BlueDecorator(new Apple()));
        apple.show();
        System.out.println("\n苹果总数:"+fruit.statNumber());
    }
}

装饰器模式在InputStream中的使用介绍图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值