java软件设计模式只单例设计模式
概述
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
今天我们来看一下第一个单例模式的例子。
有时候我们服务器的访问量巨大的时候,使用普通的类方法为每一个访问的用户创建一个对象,而提供的功能大体相同时,就会极大的占据服务器的存储空间,同时损耗CPU,这个时候,我们就希望在服务器中只存在一个对象供所有的方法调用,这就是单例设计模式。
单例设计模式分为两种:
- 饿汉设计模式
- 懒汉设计模式
我们先来看看饿汉设计模式,先看一下实例
/**
* @author MyPc 单例设计模式
*/
class Test { static Test test = new Test(); // 私有化构造方法
private Test() {
System.out.println("这是单例设计模式");
} public static Test getTest() { return test;
} //main方法
public static void main(String[] args) { Test t1 = Test.getTest();
Test t2 = Test.getTest();
if(t1 == t2){
System.out.println("對象相同");
}
}
}
在这个单例设计设计模式中,我们能够看到一个很重要的一步,就是私有化构造方法。
我们知道在new一个类对象时,会同时调用该类的构造方法,所以默认情况构造方法是public型的,在单例设计模式中,我们将类的构造方法设为private,就会让别的类无法创建该类的对象,同时我们在该类的内部创建一个静态的该类的自己的对象,并向外提供一个静态的方法调用这个对象,这样就能保证该类的对象始终只有一个。这就是饿汉单例模式,下面我们再看一下懒汉单例模式:
/**
* @author MyPc 单例设计模式
*/
class Test { static Test test; // 私有化构造方法
private Test() {
System.out.println("这是单例设计模式");
} public static Test getTest() {
if(test == null){
test = new Test();
}
return test;
} //main方法
public static void main(String[] args) { Test t1 = Test.getTest();
Test t2 = Test.getTest();
if(t1 == t2){
System.out.println("對象相同");
}
}
}
相比较饿汉单例模式,饿汉单利模式会存在一个问题,那就是始终会在内存中存在这个对象,不管有没有使用,如果没有使用的话也会造成资源的浪费,这时候懒汉设计模式在单线程下就能避免这个问题,我们能够看到实例中我们一个开始并没有创建对象,只是声明了一下该类的对象,在需要具体调用时再判断是否已经存在该类的对象了,如果存在,返回对象,如果不存在,new一个该对象再返回。
单例设计模式在某些情况能够极大的节省资源,非常适合访问量大的网站使用。
java软件设计模式只单例设计模式的更多相关文章
- java设计模式之单例设计模式
单例设计模式 保证一个类在使用过程中,只有一个实例.优势就是他的作用,这个类永远只有一个实例. 优势:这个类永远只有一个实例,占用内存少,有利于Java垃圾回收. 单例设计模式关键点 私有的构造方法. ...
- Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?
什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的. 如果重 ...
- Java中设计模式之单例设计模式-1
单例作用 1 节省内存 2 可以避免多种状态导致状态冲突 单例的创建步骤 1 私有化构造方法 2 私有化声明的属性 3 getInstance 4 方法需要静态 单例分类 1.懒汉式 2.饿汉式 两种 ...
- java设计模式之单例设计模式和多例设计模式
单例设计模式:构造方法私有化,在类的内部定义static属性和方法,利用static方法来取得本类的实例化对象:无论外部产生多少个实例化对象,本质上只有一个实例化对象 饿汉式单例设计 class Si ...
- Java设计模式之单例设计模式 入门实例
一.基础概念 (1).单例设计模式:保证一个类在内存中的对象唯一性. (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作.一个程序要基于另一个程序操作后的结果进行操 ...
- Java设计模式之单例设计模式总结
package singleton; /**单例设计模式 饿汉式 * * @author gx *这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化, ...
- 二·、spring成长之路——委派设计模式和单例设计模式
3.委派设计模式 设计思想:就是多个类去完成一项的工作,其中一个类去分发任务,其他类做具体的任务,而具体表现是这个委派类的工作,具体过程是被委派类来操作的 [ITask.java]定义工作的统一标准 ...
- JAVA的设计模式之单例设计模式
1.确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例. 1)理论 Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 使用Singl ...
- java基础学习之单例设计模式学习
最近狂补java基础的我重新学习了下单例,下面直接贴出代码,以作备忘 package com.darling.single; /** * 单例模式 * 单例即在内存中只存在该类的一个实例,要想实现这个 ...
随机推荐
- git 更改远程仓库地址,强行推送远程仓库
强行推送远程仓库 #把一个现有的工程拷贝一份 #去掉远程仓库关联 git remote rm origin #添加远程仓库关联 git remote add origin http://xxx.git ...
- C++11获取当前毫秒数
获取当前毫秒数 主要是打印日志的时候用到 / CLOCKS_PER_SEC); 头文件为ctime
- java.net.BindException: Problem binding to [node2:45454] java.net.BindException: Cannot assign requested address
主要原因是网络的问题.可参考官方给出的详细解释. http://wiki.apache.org/hadoop/BindException 总之,这是网络或者配置网络的问题,跟 hadoop 基本没有关 ...
- NOIP考前知识点整理
前言:距离NOIP还有不到一百天(虽然NOIP没了),为了整理一下所学的内容,才有了这篇博文.本文内容无特殊说明全部来自于博主的博客,代码也都是新敲的,努力在个人的码风基础上做到尽量简洁,求资瓷. 一 ...
- 内网IPC$入侵
一.域操作相关的命令1.查看域用户 net user/domain2.查看有几个域 net view/domain3.查看域内的主机 net view/domain: XXX4.查看域里面的组 net ...
- Service 是否在 main thread 中执行, service 里面是否能执行耗时的操作?
默认情况,如果没有显示的指 service 所运行的进程, Service 和 activity 是运行在当前 app 所在进程的 main thread(UI 主线程)里面.service 里面不能 ...
- 如何保存 Activity 的状态?
Activity 的状态通常情况下系统会自动保存的,只有当我们需要保存额外的数据时才需要使用到这样的功能.一般来说, 调用 onPause()和 onStop()方法后的 activity 实例仍然存 ...
- Selenium 2自动化测试实战2(数组与字典)
一.数组与字典 1.数组 数组用方括号([])表示,里面的每一项用逗号(,)隔开 Prthon允许在数组里面任意地放置数字或字符串.需要注意的是,数组下标是从0开始的,所以,lists[0]会输出数组 ...
- Java编写时钟 Applet 程序
简单分析: package clockApplet; import java.applet.Applet; import java.awt.Color; import java.awt.Graphic ...
- Java程序设计——反转字符串 & 找朋友 & 计算int型二进制1的个数 & 情报加密 & 计算日期 & 求近似数 & 输出较小数(练习1)
作为刚刚入门Java的选手,其实C++的功底起到了很大的作用.但是,Java之于C++最大的不同,我个人认为,是其类的多样性.才入门的我,写着老师布置的简单的面对过程的题,如果是C++,可以算是简单了 ...