当前位置: 首页 > 科技观察

常用设计图案系列-享元图案

时间:2023-03-15 23:25:38 科技观察

大家好,我是鸭血粉。今天周六,你是在休息学习还是在加班呢?阿粉今天要给大家分享的是享元模式中的一种结构模式,享元模式既然是一种结构模式,自然是用来组织代码,调整相应的代码结构来实现效果的。让我们一起来看看吧。享元模式是第一个常规操作。我们先来看看什么是享元模式。维基百科解释:享元模式(英文:FlyweightPattern)是一种软件设计模式。它使用共享对象来尽可能减少内存使用,并与尽可能多的相似对象共享信息;当大量对象被简单地复制导致内存使用量高得无法接受时,它是合适的。通常对象的部分状态是可以共享的。一种常见的做法是将它们放在外部数据结构中,并在需要时将它们传递给享元。关键字:减少内存、共享对象和外部数据。简单描述一下,一批对象既有相同的内容,也有不同的内容。相同内容共享,不同内容动态传递,尽量减少对象生成。这里需要理解的是,这多个对象实际上对应的是底层同一个对象,物理地址是一个。享元模式使用场景享元模式的使用场景还是很多的。最常见的场景就是JavaJDK中的String字符串类。因为JVM中有常量池,常量池的实现是享元模式。避免存在多个相同的对象。另外,线程池和很多用到缓冲池的地方都采用享元模式。比如Integer类默认缓存-128到127之间的整数,以及其他场景。在演示享元模式之前,我们需要了解享元模式涉及的几个角色名称。抽象享元类:通常是一个接口,主要提供修改内部数据的接口。ConcreteFlyweightclass:享元实现类,通常存放在内存中,方便使用享元工厂类:对外创建具体的享元类下面通过一个简单的例子来演示享元模式。我们创建一个接口类,然后编写一个实现类,并通过一个工厂来创建享元类,相关代码如下:UML图解代码演示我们首先创建一个接口类IFlyweight.java,其中包含一个方法来设置width,如下然后写一个实现类FlyweightImpl.java来实现接口,并在构造函数中传递一个Color对象为相同的颜色保存一个对象。颜色辅助类Color.java最后编写一个测试应用类FlyweightDemo.java。在上面的测试类中,我们分别定义了三个两种颜色的对象。由于缓存了相同颜色的对象,所以输出结果如下:outputResults》从上面的运行结果可以看出,flyweight0和flyweight1其实是同一个对象。虽然它们的width和height属性值不同的是,它们的底层对应的是同一个对象本身。这就是flyweight模式的核心内容,就是通过共享变量来减少对象的生成,从而减少内存的使用。综上所述,今天给大家分享一下享元模式在设计模式中的结构模式,享元模式在我们日常的框架和组件中都有广泛的应用,希望本文能帮助大家加深或者理解享元模式,欢迎大家一起讨论交流,并谈谈你所知道的其他哪些框架和组件使用享元模式。