1.前言
- 在之前的文章设计模式(Design pattern):简单&粗暴解析中已经为大家深入浅出解析了
设计模式
的 七大原则、三大类型。 - 本文为大家解析三大类型中 结构型 里其中的
享元模式
。 - 文章中实例 linhaojian的Github
2.目录
3.含义
运用共享技术有效地支持大量细粒度对象的复用。
4.解决
1.相同对象或者相似对象重复创建。
5.原理
通过 【享元】这个中介,使用 “集合” 的方式存储相同或者相似的对象 。
5.1 享元模式结构
5.2 结构分析
FlyWeight:定义共享对象的功能。
ConcreteFlyWeight:共享对象的具体实现。
FlyWeightFactory:封装共享对象工厂。
5.3 实例(缓冲池)
- 图片的缓存。
Cache
public interface Cache {
byte[] getBytesForPicture();
}
PictureCache
public class PictureCache implements Cache{
private String url;
private byte[] picturedatas;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
//设置缓存数据
public void setPicturedatas(byte[] picturedatas) {
this.picturedatas = picturedatas;
}
//获取缓存数据
@Override
public byte[] getBytesForPicture() {
return picturedatas;
}
}
CacheFactory
public class CacheFactory {
private HashMap<String,PictureCache> hashMap = new HashMap<>();
public Cache getCache(String url){
//获取缓存对象
if(hashMap.get(url)!=null){
return hashMap.get(url);
}
//存储缓存对象
PictureCache pictureCache = new PictureCache();
pictureCache.setUrl(url);
pictureCache.setPicturedatas(new byte[10]);
hashMap.put(url,pictureCache);
return pictureCache;
}
}
6.优点
1.避免相同或者相似的对象重复创建。
2.享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。
7.缺点
- 享元模式使得系统更加复杂,需要分离出内部状态和外部状态,这使得程序的逻辑复杂化。
2.为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部状态使得运行时间变长。
8.总结
- 到此,
享元模式
就解析完毕,后续我会把上述 三大类型模式 下的各子模式进行解析分享,
请继续关注linhaojian_简书! - 如果喜欢我的分享,可以点击 关注 或者 赞,你们支持是我分享的最大动力 。
- linhaojian的Github
欢迎关注linhaojian_CSDN博客或者linhaojian_简书!
不定期分享关于安卓开发的干货。
设计模式(Design pattern):简单&粗暴解析
单例模式(Singleton Pattern):简单&粗暴解析
简单工厂模式(Easy Factory Pattern):简单&粗暴解析
工厂模式(Factory Pattern):简单&粗暴解析):简单&粗暴解析
抽象工厂模式(Abstract Factory Pattern):简单&粗暴解析
建造者模式(Builder Pattern):简单&粗暴解析
代理模式(Proxy Pattern):简单&粗暴解析
装饰器模式(Decorator Pattern):简单&粗暴解析
外观模式(Facade Pattern):简单&粗暴解析
享元模式(Flyweight Pattern):简单&粗暴解析
观察者模式(Observe Pattern):简单&粗暴解析
策略模式(Strategy attern):简单&粗暴解析
写技术文章初心
- 技术知识积累
- 技术知识巩固
- 技术知识分享
- 技术知识交流