单例模式

Java连载53-单例模式初步、final关键字补充、回顾知识点

被刻印的时光 ゝ 提交于 2019-12-05 15:45:52
一、回顾 1.类和对象的区别 2.UML(uniform makeup language) 3.方法区存储静态变量、常量(static final修饰) 4.堆内存中存储对象 5.栈存储变量 6.this()可用于构造方法第一行 7.static静态语句块(JVM中第一次使用类的时候,会进行加载静态语句块),还可以修饰变量和方法 8.设计模式是可以重复利用的解决方案可以分为四类 9.类的继承(单继承) 10.方法覆盖(相同修饰符,相同方法名,相同参数) 11.多态,子类->父类(向上转型 父类->子类(向下转换,强制类型转换) 12.super关键字,子类里面访问父类的方法 13.super()可以出现在构造方法第一行,默认自动生成,不会创建父类,只是用来初始化,用来调用父类的构造方法。 14.final关键字 15.abstract抽象类 非抽象类调用抽象类,必须将抽象类中的方法覆盖、重写 二、深入final关键字 1.抽象类不可以被final关键字修饰(抽象类定义出来就是用来继承的) 2.fianl修饰的引用类型,该引用不可以再重新指向其他的java对象 但是final修饰的引用,该引用指向的对象的属性是可以修改的。 package com.bjpowernode.java_learning; ​ public class D53_1_FinalKeywordAddition

java版单例模式

烈酒焚心 提交于 2019-12-05 15:11:19
单例模式可以说是最常用的设计模式之一,其主要作用就是保证一个类只有一个实例,并且提供一个访问它的全局访问点,严格的控制用户的访问方式。 单例模式又分为懒汉模式和饿汉模式,首先说一下饿汉模式: 饿汉模式 饿汉模式有点饥不择食的意思,就像一个人饿了很久,所以只要有人给东西他就吃而不考虑东西好不好吃,自己能不能吃得了。代码如下: public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } } 意思大家都懂,就是一种静态初始化的方法,只要类一加载就实例化对象,优点就是线程安全,缺点就是提前占用系统资源。这时候就出现了懒汉模式: 懒汉模式 对比饿汉模式的饥不择食,懒汉模式的意思就是饭送到嘴边才吃,否则再饿也不会动嘴。代码如下: public class Singleton{ private static Singleton instance; private Singleton(){} public static Singleton getInstance() { if (instance == null) { instance =

单例模式

时光毁灭记忆、已成空白 提交于 2019-12-05 14:17:05
1.定义: 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中, 一个类只有一个对象实例。 2.结构:    3.实现: 1)饿汉模式: 不管有没有使用,对象都已经创建了; 1 // 饿汉式单例 2 public class Singleton { 3 // 私有构造 4 private Singleton() {} 5 // 饿汉模式对象从开始就已经创建了 6 private static Singleton single = new Singleton(); 7 // 静态工厂方法 8 public static Singleton getInstance() { 9 return single; 10 } 11 }   饿汉式单例在类加载初始化就创建好了一个静态的对象供外部使用,除非系统重启,这个对象不会改变,所以本身就是 线程安全 的。Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内, Singleton的唯一实例只能通过getInstance()方法访问。 (事实上,通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Java单例实现失效) 2)懒汉模式: 如果未调用,对象不会创建,只有被使用时,创建对象。 1 // 懒汉式单例

private构造器和单例模式

こ雲淡風輕ζ 提交于 2019-12-05 11:57:14
// hiding/Lunch.java // Demonstrates class access specifiers. Make a class // effectively private with private constructors: class Soup1 { private Soup1() {} public static Soup1 makeSoup() { // [1] return new Soup1(); } } class Soup2 { private Soup2() {} private static Soup2 ps1 = new Soup2(); // [2] public static Soup2 access() { return ps1; } public void f() {} } // Only one public class allowed per file: public class Lunch { void testPrivate() { // Can't do this! Private constructor: //- Soup1 soup = new Soup1(); } void testStatic() { Soup1 soup = Soup1.makeSoup(); } void testSingleton() {

单例模式4种方式

99封情书 提交于 2019-12-05 11:48:25
单例模式4种方式 单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保 某一个类只有一个实例存在 。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。 在 Python 中,我们可以用多种方法来实现单例模式: 1. 使用 __new__ from django.test import TestCase # Create your tests here. class Singleton: def __init__(self,name): self.name=name def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(Singleton, cls) cls._instance = orig._

phalapi-进阶篇2(DI依赖注入和单例模式)

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-05 10:05:25
#phalapi-进阶篇2(DI依赖注入和单例模式)# ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 离上一次更新过去了快两周,在其中编写了一个关于DB分表分库解决大数据量的拓展,有兴趣的童鞋可以了解了解.废话不多说,本小节在于解释一下在PhalApi框架中两个比较好的思想,单例模式和依赖注入. 附上: 官网地址: http://www.phalapi.net/ 开源中国Git地址: http://git.oschina.net/dogstar/PhalApi/tree/release ##1. 单例模式## 单例模式对于长期进行过面向对象编程的童鞋应该不算陌生,在学习php的童鞋也应该有听过,这里简单的聊一聊单例模式到底是一个怎么样东西,解决了什么问题,并且在PhalApi中是如何实现的. 单例单例,所谓单例也就是有且只有一个存在,这就是单例,不难看出他的好处资源利用少因为只有一个,大家都是知道要使用一个类必须要实例他也就是new在每次new一个对象的时候都会在内存中生成一块区域来存放这个实例,如果在程序一次运行中使用了很多的new实例化了同一个对象,那就比较消耗资源了,但是如果是通用一个使用全局变量 global 程序又会显得不优雅而且会很乱,在这种情况下单例模式就产生了.

单例模式

孤街醉人 提交于 2019-12-05 04:42:32
单例模式,网上的教程一抓一大把,设计模式也是程序员进阶,必不可少的宝典。今天写这篇教程。仅作为自己的总结 一.简介 单例模式,属于创建类型的一种常用的 软件设计 模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例) 二.优缺点   优点:   1.实例控制     单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。   2.灵活性     因为类控制了实例化过程,所以类可以灵活更改实例化过程。   缺点:   1.开销     虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。   2.可能的开发混淆     使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用 new 关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。   3.对象生存期     不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用  三.C#实现单例模式    1.创建

单例模式

…衆ロ難τιáo~ 提交于 2019-12-05 04:32:23
/** * 饿汉式 在类初始化时直接创建对象,不存在线程安全问题,不管你是否需要这个对象都会创建 * <p> * 1. 构造器私有化 * 2. 自行创建,并且用静态变量保存 * 3. 向外提供这个实例 * 4. 强调这是一个单例,我们可以用final修饰,不能改变引用,可以改变属性。 * * @author yuan */ public class Singleton1 { public static final Singleton1 INSTANCE = new Singleton1(); private static Date date = new Date(); private Singleton1() { } } /** * 饿汉式 * <p> * 枚举类型:表示该类型的对象是有限的几个 * 我们可以限定成一个,就成了单例 * <p> * public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; * 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要构造新对象。 * https://www.cnblogs.com/liaojie970/p/6474733.html * * @author yuan */ public enum Singleton2 { /** * 相当于 Singleton2

对几种设计模式的归纳理解

时光总嘲笑我的痴心妄想 提交于 2019-12-05 03:14:55
工厂模式 只对结果赋值,封装创建过程,保证独一无二 单例模式 保证过程中只有一个实例 原型模式 多个实例,一个原型派生多份数据 代理模式 找人办事,增强职责 委派模式 老板分配任务给管理人员 策略模式 管理人员根据不同情况分配任务给员工具体实现 模板模式 流程标准化,具体实现剥离主干 适配器模式 兼容转接头、支持不同支付方式 装饰器模式 奶茶加料 观察者模式 任务完成时触发通知事件 来源: https://www.cnblogs.com/erfsfj-dbc/p/11901952.html

Python中的单例模式的几种实现方式的及优化

三世轮回 提交于 2019-12-05 00:21:51
Python中的单例模式的几种实现方式的及优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法实现(推荐使用,方便) 5.基于metaclass方式实现 相关知识 实现单例模式 回到顶部(go to top) 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。 在 Python 中,我们可以用多种方法来实现单例模式 原参考博客地址: https://www.cnblogs.com/huchong/p/8244279.html 来源: https://www.cnblogs.com/whkzm/p/11890983.html