设计模式_单例模式
来源:互联网 发布:python编写一个小程序 编辑:程序博客网 时间:2024/05/03 07:33
Singleton Pattern
Ensure a class has one instance,and provide a global point of access to it. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
皇帝只有一个
首先我们来想想,如何获取一个对象,一般是通过new来实现,高级的通过反射,但是该如何禁止外部创建对象。
answer : 将构造方法设为私有
优点: 减少内存开支,一个对象需要频繁的创建,销毁时。 避免了子类的多重占用,设置全局的访问点,优化和共享资源访问。
缺点: 扩展性差,我想着是它的优点吧。
使用场景:
要求生成唯一序列号
整个项目中需要一个共享访问点或共享数据
工具类
<span style="font-size:12px;">public class Emperor { private final static Emperor emperor =new Emperor(); private Emperor(){} public static Emperor instance(){ return emperor; } public void order(){ System.out.println("吾皇有旨"); }}</span>
<span style="font-size:12px;">public class Emperor { private final static Emperor emperor = null; private Emperor() { } public static synchronized Emperor instance() { if (emperor == null) { return new EmperorII(); } else { return emperor; } } public void order() { System.out.println("吾皇有旨"); }}</span>
对比:饿汉式主要需要考虑的问题是效率问题,类加载实例化对象时,需要内存,自然就加重了JVM的负担
懒汉式解决了上述问题,延时加载,但是需要注意的是多线程中的线程同步问题即可。
下面就是之前项目中的一个应用,可惜当时讲的时候还不懂。现在终于懂了。
<span style="font-size:12px;">import java.io.IOException;import java.io.InputStream;import java.util.Properties;//单例模式:可以保证系统中一个类只有一个实例,并且,这个实例容易被外界调用。好处就是节省系统的资源//如果希望系统中的某个类的对象只有一个,这个时候你可以选择用单例 public class Myproperties extends Properties { private static Myproperties mypro=null; //对外提供的实例 /** * 单例的核心就是 构造方法私有化 */ private Myproperties(){ //比db.properties中读取所有的配置, //通过类的反射实例,获取classpath类路径下的资源文件db.properties,并建立一个流 InputStream is=this.getClass().getResourceAsStream("/db.properties"); try { this.load(is); //把流变为一个properties 结构的文档 ,从输入流 } catch (IOException e) { e.printStackTrace(); LogUtil.log.error(e.toString()); }finally{ try { is.close(); } catch (IOException e) { e.printStackTrace(); LogUtil.log.error(e.toString()); } //关闭流 } } /** * 对外提供一个获取唯一实例的方法 * @return */ public static Myproperties getMyproperties(){ if( mypro==null){ mypro=new Myproperties(); } return mypro; }}</span>
<span style="font-size:12px;">/** * 获取数据库连接的方法 * @return:返回获取到的连接 */ public Connection getConnection() { try { con = DriverManager.getConnection(Myproperties.getMyproperties() .getProperty("url"), Myproperties.getMyproperties()); } catch (SQLException e) { e.printStackTrace(); LogUtil.log.error(e.toString()); } return con; }</span>
最近打了俩天的LOL,之前学的有点烦,没有实际应用。还好最近调整好了状态,keep going!
我是菜鸟,我在路上。
0 0
- 设计模式_单例设计模式
- 设计模式_单例
- 设计模式_单例模式
- 设计模式之_单例模式
- Java设计模式_单例模式
- 大话设计模式_单例模式
- 设计模式_单例模式
- 设计模式05_单例模式
- 设计模式01_单例模式
- 设计模式_单例模式
- 设计模式_单例模式
- C#设计模式_单例模式
- 设计模式_单例模式
- 设计模式_单例模式
- 【GOF23设计模式】_单例模式
- 设计模式_单例模式
- 设计模式01_单例模式
- java设计模式_单例模式
- Vuforia SDK---- AR开发vuforia 二维码扫描
- jQuery插件 -- Cookie插件
- spring4mvc
- sphinx --- 安装中碰到的问题
- 银行储蓄系统
- 设计模式_单例模式
- 工程实训
- UVA 11877-ACM
- AndroidStudio构建系统用户指南
- Java对象赋值原理详解(上)附实例源码
- Java序列化
- 路径规划PgRouting
- 九章算法面试题77 插入区间
- Linux操作系统基础命令、快捷键