龙空技术网

JAVA API中最常用的设计模式,不是工厂模式,而是这个

沙茶敏碎碎念 1842

前言:

此时大家对“java最常用的六种设计模式”大概比较着重,兄弟们都需要学习一些“java最常用的六种设计模式”的相关文章。那么小编也在网上网罗了一些对于“java最常用的六种设计模式””的相关文章,希望咱们能喜欢,大家一起来学习一下吧!

不知道大家有没有看过Java API,当我们使用Java的IO类的时候,我们会发现有很多不同的InputStream类,如果你去仔细阅读里面的方法,就会发现他们都非常地相似,都是在里面使用InputStream,却又提供了一些不同地功能,或者更方便地接口,我们称这种做法为修饰,即修饰器模式。

修饰器模式的基本概念

面向对象地基本原则,要求类应该对扩展开放,对修改关闭,但是要做到这样却是非常的难,修饰模式是一种折衷地方式。修饰器模式其实是一种组合的方案,类的核心结构作为其中一个元素,除了调用核心类执行,还会外带执行自身类的一些属性。

上面是修饰器模式的一个类图,可能大家还会比较懵,毕竟很多人看不太懂类图,我们通过几个简单的例子来简单的来对这个修饰器模式进行进一步的认识。

例子一

我们经常会打日志,可能有一个专门的日志类,我们暂且称之为LoggerBase,有一天,我们的系统新增了一个数据分析的模块,需要对部分日志进行分析,但是因为这个分析模块的局限,需要在原有日志上面,每一行前面都新增'log'等关键字,这个时候我们需要怎么办呢?我们总不能直接在LoggerBase上面直接加上对应关键字,这样可能还会影响到其他系统。所以我们可以新增一个新的类,来修饰这个LoggerBase,当调用打印日志方法的时候,自己优先打下log关键字,然后执行LoggerBase的打印日志方法。

可能有人会问,那我们为什么不直接使用继承的方法呢?继承虽然非常的强大,但是在编译的时候,一个类可以做什么,已经决定了,而组合则不一样,可以进行动态扩展。上述例子中,如果我们有时候需要LoggerBase,有时候又需要LoggerBaseNew,如果我们使用继承模式,在前面新增一个关键字需要新增两个子类,而修饰器模式则没必要,只要LoggerBase跟LoggerBaseNew实现了同样的方法,那么新增的这个类只要根据具体的需要,切换自己所修饰的对象就可以解决问题了!

例子二

我们在游戏开发中,经常会有各种各样的装备,经常会有各种各样的套装,有些套装又4个不同的装备,有些套装则有5个装备甚至只有2个装备,那么如何在计算机里面描述一个套装呢?

修饰器模式,为我们提供了一个非常好的设计思想,不用去关系套装里面每一个具体装备的类型,所有的装备都去继承同一个接口,在结算的时候,从最外层的开始调用,逐层进行结算。

可能你还很难理解为什么要这么设计,可是当你想想,如果你的觉得的装备有数十种,像一些飞车、跳舞游戏,服饰套装可能有几十个组件,你甚至不用关系每一个组件是什么东西,这种修饰器模式,将他们组成一条链,逐层调用!

总结

好了,今天我们就介绍到这里,中秋假期已过,又要上班了,祝大家工作顺利。欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)

(此处已添加圈子卡片,请到今日头条客户端查看)

标签: #java最常用的六种设计模式