聊聊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设计模式-结构型-适配器模式


原文始发于微信公众号(写代码的ZaytonSquid):聊聊Java IO中的设计模式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/246356.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!