本文目录
一、组合模式介绍
1.1 含义
1.2 适用场景
1.3 主要解决
1.4 应用实例
1.5 优缺点
二、组合模式实现
2.1 类图
2.2 角色分析
2.3 代码实现
三、源码分析
这种类型的设计模式属于结构型模式。
一、组合模式介绍
1.1 含义
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
1.2 适用场景
① 系统有大量相似对象。
② 需要缓冲池的场景。
1.3 主要解决
降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。
关键代码:用 HashMap/HashTable 存储这些对象。
1.4 应用实例
① 数据库的数据池;
② JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面;
1.5 优缺点
① 系统有大量相似对象。
② 需要缓冲池的场景。
降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。
关键代码:用 HashMap/HashTable 存储这些对象。
1.4 应用实例
① 数据库的数据池;
② JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面;
1.5 优缺点
① 数据库的数据池;
② JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面;
优点:
① 它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份;
② 享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。
缺点:
① 享元模式使得系统更加复杂,需要分离出内部状态和外部状态,这使得程序的逻辑复杂化;
② 为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部状态使得运行时间变长。
注意事项:
1、注意划分外部状态和内部状态,否则可能会引起线程安全问题。
2、这些类必须有一个工厂对象加以控制。
二、组合模式实现
所有设计模式的代码实现例子都可在码云上查看哦,感兴趣的可以查看哈,码云地址:https://gitee.com/no8g/java-design-patterns
2.1 类图
所有设计模式的代码实现例子都可在码云上查看哦,感兴趣的可以查看哈,码云地址:https://gitee.com/no8g/java-design-patterns
2.2 角色分析
Flyweight:享元接口,通过这个接口传入外部状态并作用于外部状态;
ConcreteFlyweight:具体的享元实现对象,必须是可共享的,需要封装享元对象的内部状态;
UnsharedConcreteFlyweight:非共享的享元实现对象,并不是所有的享元对象都可以共享,非共享的享元对象通常是享元对象的组合对象;
FlyweightFactory:享元工厂,主要用来创建并管理共享的享元对象,并对外提供访问共享享元的接口。
2.3 代码实现
Flyweight:享元接口,通过这个接口传入外部状态并作用于外部状态;
ConcreteFlyweight:具体的享元实现对象,必须是可共享的,需要封装享元对象的内部状态;
UnsharedConcreteFlyweight:非共享的享元实现对象,并不是所有的享元对象都可以共享,非共享的享元对象通常是享元对象的组合对象;
FlyweightFactory:享元工厂,主要用来创建并管理共享的享元对象,并对外提供访问共享享元的接口。
三、源码分析
暂无,后续再更新!
完结!



