单例模式多文档窗体java

java怎么实现单实例运行

Java实现单例的5种方式

1. 什么是单例模式

单例模式指的是在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存。

2. 单例模式和静态类的区别

首先理解一下什么是静态类,静态类就是一个类里面都是静态方法和静态field,构造器被private修饰,因此不能被实例化。Math类就是一个静态类。

知道了什么是静态类后,来说一下他们两者之间的区别:

1)首先单例模式会提供给你一个全局唯一的对象,静态类只是提供给你很多静态方法,这些方法不用创建对象,通过类就可以直接调用;

2)单例模式的灵活性更高,方法可以被override,因为静态类都是静态方法,所以不能被override;

3)如果是一个非常重的对象,单例模式可以懒加载,静态类就无法做到;

那么时候时候应该用静态类,什么时候应该用单例模式呢?首先如果你只是想使用一些工具方法,那么最好用静态类,静态类比单例类更快,因为静态的绑定是在编译期进行的。如果你要维护状态信息,或者访问资源时,应该选用单例模式。还可以这样说,当你需要面向对象的能力时(比如继承、多态)时,选用单例类,当你仅仅是提供一些方法时选用静态类。

单例模式多文档窗体java

Java单例模式是什么意思?

Java单例模式是确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例的模式;

Java单例模式分三种:懒汉式单例、饿汉式单例、登记式单例。

(1)Java单例模式有以下特点:单例类只能有一个实例;单例类必须自己创建自己的唯一实例;单例类必须给所有其他对象提供这一实例。

(2)Java单例模式的应用范围:每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中,每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。

JAVA单例模式有哪些?

一、懒汉式单例

在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。

public

class

LazySingleton

{

/**

*

私有静态对象,加载时候不做初始化

*/

private

static

LazySingleton

m_intance=null;

/**

*

私有构造方法,避免外部创建实例

*/

private

LazySingleton(){

}

/**

*

静态工厂方法,返回此类的唯一实例.

*

当发现实例没有初始化的时候,才初始化.

*/

synchronized

public

static

LazySingleton

getInstance(){

if(m_intance==null){

m_intance=new

LazySingleton();

}

return

m_intance;

}

}

二、饿汉式单例

在类被加载的时候,唯一实例已经被创建。

public

class

EagerSingleton

{

/**

*

私有的(private)唯一(static

final)实例成员,在类加载的时候就创建好了单例对象

*/

private

static

final

EagerSingleton

m_instance

=

new

EagerSingleton();

/**

*

私有构造方法,避免外部创建实例

*/

private

EagerSingleton()

{

}

/**

*

静态工厂方法,返回此类的唯一实例.

*

@return

EagerSingleton

*/

public

static

EagerSingleton

getInstance()

{

return

m_instance;

}

}

**************************************************************************************

懒汉方式,指全局的单例实例在第一次被使用时构建;

饿汉方式,指全局的单例实例在类装载时构建

**************************************************************************************

三、登记式单例

这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。

public

class

RegSingleton

{

/**

*

登记薄,用来存放所有登记的实例

*/

private

static

Map

m_registry

=

new

HashMap();

//在类加载的时候添加一个实例到登记薄

static

{

RegSingleton

x

=

new

RegSingleton();

m_registry.put(x.getClass().getName(),

x);

}

/**

*

受保护的默认构造方法

*/

protected

RegSingleton()

{

}

/**

*

静态工厂方法,返回指定登记对象的唯一实例;

*

对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回

*

@param

name

*

@return

RegSingleton

*/

public

static

RegSingleton

getInstance(String

name)

{

if

(name

==

null)

{

name

=

“RegSingleton”;

}

if

(m_registry.get(name)

==

null)

{

try

{

m_registry.put(name,

(RegSingleton)

Class.forName(name).newInstance());

}

catch

(InstantiationException

e)

{

e.printStackTrace();

}

catch

(IllegalAccessException

e)

{

e.printStackTrace();

}

catch

(ClassNotFoundException

e)

{

e.printStackTrace();

}

}

return

m_registry.get(name);

}

/**

*

一个示意性的商业方法

*

@return

String

*/

public

String

about()

{

return

“Hello,I

am

RegSingleton!”;

}

}

java常用的设计模式有那些,各有什么优缺点?

设计模式:模式是一种问题的解决思路,它已经适用于一个实践环境。并且可以适用于其他环境。

设计模式的分类:分布式编程模式,用户界面模式,数据模型模式三大类。

设计模式的作用:设计的重用;

为设计提供共同的词汇,每个模式名就是一个设计词汇,其概念使得程序员的交流变得方便;

在开发文档中采用模式词汇可以让其他人更容易理解你的想法。

GoF设计模式的分类:

根据目的准则分类:

1. 创建型:creational 与对象的创建有关。

2. 结构型:Structural 处理类或对象之间的组合。

3. 行为型:behavioral 描述类或对象如何交互及如何分配职责。

创建型模式

1.抽象工厂模式 AbstractFactory

2.建造者模式 Builder

3.工厂方法模式 Factory Method

4.原型模式 Prototype

5.单例模式 Singleton

结构型模式

1.适配器模式 Adapter

2.桥接模式 Bridge

3.组合模式 Composite

4.装饰模式 Decorator

5.外观模式 Facade

6.享元模式 Flyweight

7.代理模式 Proxy

行为模式

1.职责链模式 Chain of Responsibility

2.命令模式 Command

3.解释器模式 Interpreter

4.迭代器模式 Iterator

5.中介者模式 Mediator

6.备忘录模式 Memento

7.观察者模式 Observer

8.状态模式 State

9.策略模式 Strategy

10.模板方法模式 Template Method

11.访问者模式 Visitor

其他看参考资料

java 中 单实例和多实例是指的什么?

简单的说单例就是

只能有一个实例,所以地方用到的实例都是同一个。

就好像家人吃饭,桌子是单例的,大家用的是同一个。而碗是多例的,每人都有自几的。

下面是具体的例子:

Java模式之单例模式:

单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。

特点:

1,一个类只能有一个实例

2,自己创建这个实例

3,整个系统都要使用这个实例

例:

在下面的对象图中,有一个”单例对象”,而”客户甲”、”客户乙”

和”客户丙”是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录

数据库连接都需要这样的单线程操作。一些资源治理器经常设计成单例模式。

外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer

Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中治理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来治理这些属性文件。一个例子:Windows

回收站。

在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。

两种形式:

1,饿汉式单例类

public

class

Singleton

{

private

Singleton(){}

//在自己内部定义自己一个实例,是不是很希奇?

//注重这是private

只供内部调用

private

static

Singleton

instance

=

new

Singleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问

public

static

Singleton

getInstance()

{

return

instance;

}

}

2,懒汉式单例类

public

class

Singleton

{

private

static

Singleton

instance

=

null;

public

static

synchronized

Singleton

getInstance()

{

//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

//使用时生成实例,提高了效率!

if

(instance==null)

instance=new

Singleton();

return

instance;

}

}

第二中形式是lazy

initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。

注重到lazy

initialization形式中的synchronized,这个synchronized很重要,假如没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。

一般来说第一种比较安全。进入讨论组讨论。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月26日 15:15:23
下一篇 2024年3月26日 15:22:33

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    4100
  • javaserver模式,javaserverlet

    什么是severlet,及在Java开发中的作用? 1、Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java-enabled Web Server中。Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。 2、回答二:是severlet!主要是生成动态Web内容和编写的小…

    2024年5月23日
    4200
  • linuxhelp文档,linux技术文档

    Linux下面如何删除“–help”文件? 1、–help rpm jiangtao@Gentoo ~/ls-rpm $ rm — –help jiangtao@Gentoo ~/ls-rpm $ ls rpm jiangtao@Gentoo ~/ls-rpm 明白? 其实也可以选择使用通配符绕过。不过有的时候…

    2024年5月23日
    4100
  • 关联分析序列模式c语言,关联分析序列模式c语言实现

    C语言编写一个序列程序 1、C语言大牛雅荐的七大经典排序算法 冒泡排序 比较相邻的元素。 2、int fibonacci(int n){ int a1 = 1;int a2 = 1;int next = a1 + a2;int i = 3;while(i n){ a1 = a2;a2 = next;next = a1 + a2;} return next;}…

    2024年5月23日
    4400
  • 在word里面插入excel表格,怎么把WORD文档里面的表格放到EXCEL

    如何在word中插入excel 1、复制表格 在excel中,我们需要选择表格内容后,进行右键复制操作,如图所示。打开择性粘贴 表格复制好了后,在Word文档中右键,点击选择性粘贴选项。 2、WORD中插入另一个excel文件的具体操作方法如下:打开word,在上方找到 “插入”。选择“插入”-“对象”-“对象”。 3、完成excel表格,并将其保存在桌面上…

    2024年5月23日
    4600
  • c语言单例模式,c语言设计模式书籍

    C/C++为什么日志模块要设计成单例模式的?有什么好处? 单例模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 优势就是单例模式的作用,这个类永远只有一个实例。还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收。 提供了对唯一实例的受控访问。由于在系统内存中只存在一个对象,因此可以 节约系统资源,当 需要频繁创建和销…

    2024年5月23日
    4100
  • java切换快捷键,我的世界java切换创造模式快捷键

    在Java开发中,Eclipse常用的快捷键有哪些? Ctrl + N:新建一个文件或者一个项目。 Ctrl + Shift + R:快速打开一个资源,包括文件、类、接口、枚举等。 Ctrl + Shift + T:快速打开一个Java类。 eclipse快捷键ctrl+shift+r:打开资源这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的…

    2024年5月22日
    4200
  • java生成.bat文件,生成java文档的命令

    如何制作批处理文件来运行java程序 1、怎么在电脑上运行java程序?首先你要在你的电脑上安装jdk。你可以在后面链接地址下载适合你自己的版本(:oracle./techneork/java/javase/downloads/index.),如果这个链接过期了,请在:oracle./这个首先找一找。 2、用你安装的Java版本来代替这里的jdk0_09。确…

    2024年5月22日
    4000
  • java观察者模式视频,js观察者模式应用场景

    设计模式-快餐简解-【观察者模式】 在实际的项目开发中,观察者模式是一个使用频率非常高的模式,通过它的别名:发布——订阅模式也能知道它的主要作用就是用来解耦,将观察者和被观察者解耦,使它们的依赖性更小。 观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有…

    2024年5月22日
    4800
  • linuxspi从模式驱动的简单介绍

    linux2.4+arm9下spi总线驱动问题 先创建一个spi_board_info结构描述spi设备信息,调用spi_register_board_info将这个结构添加到board_list中。 水平不行,不一定对,仅供参考哈。如果只是从AD里读数据的话,用spi_read就可以了,定义一个8位的缓冲区和一个16位的缓冲区。然后把读到的2个8bit的数…

    2024年5月22日
    4700

发表回复

登录后才能评论



关注微信