聊聊Java IO中的设计模式

装饰器模式

装饰模式(Decorator),在不改变现有对象结构的情况下,动态地给一个对象添加一些额外的职责的模式,就增加功能来说,装饰模式比生成子类更灵活。

装饰模式在IO中使用广泛,例如缓存流BufferedInputStream ,如下图,BufferedInputStream继承FilterInputStream,而FilterInputStreamFileInputStream类同级,所以当FileInputStream需要使用缓冲流加强时,只需要将这个类作为参数传入缓冲流即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NEhxP8RU-1681653832672)(D:\BufferedInputStream.png)]

BufferedInputStream 的构造函数其中的一个参数就是 InputStream

    public BufferedInputStream(InputStream in, int size) {
        super(in);
        if (size <= 0) {
            throw new IllegalArgumentException("Buffer size <= 0");
        }
        buf = new byte[size];
    }

适配器模式

适配器主要用来协调接口不兼容,就比如笔记本电脑端口外界显示屏,端口不匹配,就需要一个适配器来将两边连接起来。那么在了解IO中的适配器模式前,我们先了解下适配器分为两种形式:对象适配器和类适配器。

对象适配器

如下图所示,我们希望Something类拥有Target类的行为,我们就可以编写一个适配器,将Something组合到适配器中,然后继承Target接口,用Something做实现即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zIR6HnKz-1681653832674)(D:\对象适配器.png)]

例如IO中使用InputStreamReader实现InputStream转为BufferedReader

public InputStreamReader(InputStream in) {
        super(in);
        try {
            sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## check lock object
        } catch (UnsupportedEncodingException e) {
            // The default encoding should always be available
            throw new Error(e);
        }
}

类适配器

如下图,Something类向拥有Target的行为我们就编写一个适配器,继承Something、Target,用Target方法封装Something

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rurtrQAz-1681653832675)(D:\类适配器.png)]

工厂模式

工厂模式用于创建对象,比如 FilesnewInputStream 就是用静态工厂模式,代码使用示例如下。

InputStream is Files.newInputStream(Paths.get(generatorLogoPath))

观察者模式

NIO 中的Watchable使用到了观察者模式。Watchable接口定义了register方法,调用者只需将监控事件WatchService 以及回调事件events都作为参数传入即可完成事件的观察和响应。

  public interface Watchable {
      
    WatchKey register(WatchService watcher,
                      WatchEvent.Kind<?>[] events,
                      WatchEvent.Modifier... modifiers)
        throws IOException;

    WatchKey register(WatchService watcher, WatchEvent.Kind<?>... events)
        throws IOException;
}

参考文献

Java IO设计模式总结

Java设计模式-结构型-适配器模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值