【每日一记】设计模式——装饰器模式

23 篇文章 0 订阅
23 篇文章 0 订阅

概述

  • 定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能
  • 适用场景:
    1. 扩展一个类的功能
    2. 动态增加功能,动态撤销

实现

public interface ISubject {
    void doSomeThing();
}
// 被装饰的类
public class ConcreteSubject implements ISubject {
    @Override
    public void doSomeThing() {
        System.out.println("do something");
    }
}
// 装饰器
public class Decorator implements ISubject {
    private ISubject subject;

    public Decorator(ISubject subject) {
        this.subject = subject;
    }

    // 扩展doSomeThing()方法,使在执行原始doSomeThing()之前先执行think()方法
    @Override
    public void doSomeThing() {
        think();
        subject.doSomeThing();
    }

    public void think() {
        System.out.println("thinking");
    }
}
// 客户端
public class Client {
    public static void main(String[] args) {
        ISubject subject = new ConcreteSubject();
        Decorator decorator = new Decorator(subject);
        decorator.doSomeThing();
    }
}

以上代码,通过装饰器模式使原始类拥有了“三思而后行”的功能,即在执行doSomeThing()方法执行会先执行think()方法

实际应用

java.io.FilterInputStream

InputStream ins = new FileInputStream("1.txt");
BufferedInputStream bin = new BufferedInputStream(ins);

上面的代码是不是很熟悉?对了,就是使用的装饰器模式,InputStream是被装饰的类,BufferedInputStream是装饰器,它为InputStream添加了数据缓冲的功能

对于其它的FilterInputStream的子类,其作用也是一样的,那就是装饰一个InputStream,为它添加它原本不具有的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值