北风设计模式课程---享元模式与单例模式区别
北风设计模式课程---享元模式与单例模式区别
一、总结
一句话总结:
不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例
1、享元模式与单例模式区别?
级别:单例模式是类级别的,一个类只能有一个对象实例;享元模式是对象级别的,可以有多个对象实例,多个变量引用同一个对象实例;
对象个数:享元模式可以再次创建对象 也可以取缓存对象,单例模式则是严格控制单个进程中只有一个实例对象
2、享元模式与单例模式的共同点?
实现节省对象创建的时间
节约内存资源
二、享元模式与单例模式区别
转自或参考:享元模式与单例模式区别
https://blog.csdn.net/fanchengkai1218/article/details/51840612
单例模式是类级别的,一个类只能有一个对象实例;
享元模式是对象级别的,可以有多个对象实例,多个变量引用同一个对象实例;
享元模式主要是为了节约内存空间,提高系统性能,而单例模式主要为了可以共享数据;
1:单例模式
public class Singleton {
// 我来写一个单例模式 懒汉式
private static Singleton singleton;
private Singleton(){}
public static synchronized Singleton getSingleton(){
if(singleton==null){
singleton=new Singleton();
}
return singleton;
}
public static void main(String[] args) {
Singleton instance1 = Singleton.getSingleton();
Singleton instance2 = Singleton.getSingleton();
System.out.println(instance1==instance2);
}
}
2:享元模式
//享元模式是多个变量公用一个对象实例 大大节约了内存空间 提高了系统性能 String类是final类型 就是使用了享元模式
//数据库连接池 线程池也是享元模式的应用
public abstract class Flyweight {
// 享元模式 享元抽象类
public abstract void operation();
}
//具体类 享元实现类
public class CreateFlyweight extends Flyweight {
private String str;
public CreateFlyweight(String str) {
this.str = str;
}
@Override
public void operation() {
// TODO Auto-generated method stub
System.out.println("Create---Flyweight:" + str);
}
public static void main(String[] args) {
Flyweight flyweight = new CreateFlyweight("fanck");
flyweight.operation();
}
}
//工厂方法类 维护一个对象存储池 享元工厂类
public class FlyweightFactory {
private Hashtable flyweights = new Hashtable();
public FlyweightFactory() {
};
public Flyweight getFlyweight(Object obj) {
Flyweight flyweight = (Flyweight) flyweights.get(obj);
if (flyweight == null) {
flyweight = new CreateFlyweight((String) obj);
flyweights.put(obj, flyweight);
}
return flyweight;
}
public int getFlyweightSize() {
System.out.println("flyweights:"+flyweights);
return flyweights.size();
}
public static void main(String[] args) {
FlyweightFactory flyweightFactory = new FlyweightFactory();
Flyweight fly1 = flyweightFactory.getFlyweight("abc");
Flyweight fly2 = flyweightFactory.getFlyweight("b");
Flyweight fly3 = flyweightFactory.getFlyweight("abc");
Flyweight fly4 = flyweightFactory.getFlyweight("ef");
Flyweight fly5 = flyweightFactory.getFlyweight("ef");
Flyweight fly6 = flyweightFactory.getFlyweight("ef");
fly1.operation();
fly2.operation();
fly3.operation();
fly4.operation();
fly5.operation();
fly6.operation();
System.out.println(flyweightFactory.getFlyweightSize());
}
}
享元模式可以再次创建对象 也可以取缓存对象
单例模式则是严格控制单个进程中只有一个实例对象
享元模式可以通过自己实现对外部的单例 也可以在需要的使用创建更多的对象
单例模式是自身控制 需要增加不属于该对象本身的逻辑
两者都可以实现节省对象创建的时间 ThreadPool 线程池 与数据库连接池 都有使用享元模式
转载于:https://www.cnblogs.com/Renyi-Fan/p/11029076.html
北风设计模式课程---享元模式与单例模式区别相关推荐
- 北风设计模式课程---享元模式
北风设计模式课程---享元模式 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式的本质是什么? 池技术:各种缓存池都是享元模式的体现 说到享元模 ...
- Python设计模式:享元模式和单例模式
设计模式八:享元模式和单例模式 什么是享元模式 享元模式是一个用于优化的设计模式,通过为相似对象引入数据共存来最小化内存使用,提升性能. 一个享元就是一个包含状态独立的不可变数据的对象,依赖状态的可变 ...
- 【设计模式】享元模式 简介 ( 定义 | 对象池 | 内部状态 | 外部状态 | 适用场景 | 相关角色 )
文章目录 I . 享元模式 简介 II . 享元模式 内部状态 和 外部状态 III . 享元模式 适用场景 IV . 享元模式 优缺点 V . 享元模式 相关模式 VI . 享元模式 相关角色 I ...
- 详解设计模式:享元模式
享元模式(Flyweight Pattern),是对象池的一种体现,也是 GoF 的 23 种设计模式中的一种结构型设计模式. 享元模式 主要用于减少创建对象的数量,以减少内存占用和提高性能.它提供了 ...
- 设计模式之享元模式详解
设计模式之享元模式详解 概述 享元模式定义: 运用共享技术来有效地支持大量细粒度对象的复用.它==通过共享已经存在的对象来大幅度减少需要创建的对象数量==.避免大量相似对象的开销,从而提高系统资源 ...
- 【设计模式】享元模式(C#)
[设计模式]享元模式 1.概述 Flyweight Design Pattern,结构型模式.享元模式中的"享元"指被共享的单元.享元模式通过复用对象,以达到节省内存的目的. 用于 ...
- 设计模式之享元模式学习笔记
前言 享元模式是池技术(String常量池.数据库连接池.缓冲池等)的重要实现方式,可以减少应用程序创建对象,降低程序内存的占用,提高性能. 定义 使用共享对象,有效的大量细粒度的对象 结构图 角色拆 ...
- 每天一个设计模式之享元模式
作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) ...
- .net设计模式 (享元模式)学习笔记
运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题 合理应用扬长避短 结构性设计模式:关注的是类与类之间的关系 .net设计模式 (享元模式)学习笔记 ...
最新文章
- Linux系统下的DDOS***防范
- java中GET方式提交和POST方式提交
- 大神微服务笔记全过程博客
- Flutter游戏:启动时的欢迎页
- 给java虚拟机增加一个属性,java -D
- ASCII码对照表(Python代码实现打印,python-docx库/xlwt库/fpdf库)
- vue2 配置本地IP地址访问项目
- Webots水下机器人仿真
- EMLOG模板山河网站主题分享
- 菜刀,蚁剑,冰蝎,哥斯拉的流量特征
- 评论回复功能 asp.net_LR2021颜色分级功能让照片调色简单有趣好玩!最新尝鲜测试...
- 毒蘑菇导航,感觉不像是毒蘑菇,更像是个树莓了。
- 关于MC34063的奇怪问题参考解决方案(mc34063升压失败、输出等于输入,输出电压低于输入)
- 神经风格转移:Anaconda快速搭建DL框架学梵高(Van Gogh)绘画Ubuntu16.04 CPUGPU版
- 各类文件系统镜像制作
- 导航坐标系:地心惯性坐标系、地心地固坐标系、当地水平坐标系、载体/机体坐标系
- 以太坊合约语言开发简单介绍
- 《小学生四则运算出题软件》结对项目总结
- php 银行支付通道_接口--php对接农行网上支付平台-b2b
- android zuk彩蛋,联想ZUK Z2你真的会玩吗?来看U-Touch 2.0的那些小彩蛋
热门文章
- rm ,rm -rf , rm -f,rm -r 以及rm 命令的其他参数命令
- Android音频开发(五)如何存储和解析最简单的音频wav文件
- java实验多线程机制_JAVA 多线程机制(一)
- python怎样画动态文字_Python制作动态字符图的实例
- fullcalendar next 不变化_让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第3篇...
- 【kafka】kafka log 存储时间 小于 offset 存储时间 offset存在但是消费不到
- 【Flink】Flink 写入 AnalyticDB MySQL
- 60-400-040-使用-binlog-MySQL BinLog入门
- 【Spring】No suitable HttpMessageConverter repsonse type
- 【Java】Java 集合相关的博客积累