Ⅰ java中单态设计模式会不会死循环呢
你难道没注意那个new 语句是静态的? 只有在程序加载的时候才执行一次当然不会死循环
Ⅱ 在java中用单例模式有什么好处
单例模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
还有, singleton(单例)能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。
另外方面,Singleton也能够被无状态化。提供工具性质的功能,
Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对Java的类 线程 内存等概念有相当的了解。
Ⅲ java中单态模式或单例模式(Singleton)有什么意义
8.单态模式或单例模式(Singleton)
单
态模式有什么用呢?想一下Adobe Photoshop ,处理两张图,会启动两个photoshop吗?多耗费内存呀! ( Consider
Adobe or oracle, process two images with two
adobes?),所以单态模式在公司编程是非常重要的。有很多场合都要求,对象只能存在一个,多了的话就太耗费资源。(马克-to-win)
class Photoshop {
/* 通过调试发现写成 static Photoshop photoshop或static Photoshop
photoshop=null;
是一样的,开始时都为null,马克-to-win,另外在调试时
可以写上观察Photoshop.photoshop的值,它是独立于任何对象之外的,从程序开始运行的main方法时, 这个值就有了,
只不过为null罢了, 我们可以一直观察
*/
static Photoshop photoshop;//这个值独立于任何对象存在,实例化任何对象之前,这个成员就有可能有值。
static Photoshop getInstanceQixy() {
if (photoshop == null) {
photoshop = new Photoshop();
System.out.println("成功创建");
} else {
System.out.println("已经创建了该类的实例,不能再创建!");
}
return photoshop;
}
void drawImage() {
System.out.println("draw image using photoshop");
}
}
public class Test {
public static void main(String[] args) {
。。。。。。。。。。。。。。。。详情网上找“马克-to-win”,参考他的网站或他的网络空间:java第2章的内容
Ⅳ JAVA基础编程问题th
这个程序很简单,主要是方法的调用什么的,其实下面的几个老兄已经给出正确的程序了,我给你个超详细的带讲解的程序:
class Student
{
//构造函数,可写可不写
public Student(){}
//声轿戚明一个无参虚帆段方法study,输出This is a student
public void study()
{
System.out.println("This is a student") ;
}
}
//设计一个启动运行类TestStudent
public class TestStudent
{
public static void main(String[] args)
{
//实例化一个Student的对象,然差誉后调用它的study()方法
new Student().study();
}
}
文件保存为TestStudent.java
Ⅳ java中单态模式或单例模式(Singleton)有什么意义
你好!
存在某些类不需要实例化多次,也就是说
该类一般没有非静态的成员变量,只需要在系统运行时实例化一次就可以了,所以就存在单例模式
如有疑问,请追问。
Ⅵ 编写一个JAVA类,要求实现类的单态设计模式
package org.jdbc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//单例模式
public class JdbcUtilsSing {
private String url="jdbc:mysql://localhost:3306/hehe";
private String user = "root";
private String password = "k517liyu";
private static JdbcUtilsSing instance ;
//私有构造函数,不能被外部创建实例
private JdbcUtilsSing() {
}
public static JdbcUtilsSing getInstance() {
//双重检查,保证只会创建一个实例
if(instance == null) {
//防止2个以上的请求并发访问
synchronized (JdbcUtilsSing.class) {
//第一个请求创建实例后,保证后面拿到锁的请求不在创建新的实例
if(instance == null) {
instance = new JdbcUtilsSing();
}
}
}
return instance;
}
//静态代码块在类加载进内存的时候就自动执行
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError();
}
}
//获得连接
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
//释放资源
public void free(ResultSet rs,Statement st,Connection conn) {
try {
if(rs != null){rs.close();}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(st != null) {st.close();}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn != null) {conn.close();}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
Ⅶ 请教关于java的单态模式
从你的代码来看只有调用getInstance()方法,才会运行System.out.println("here run init()"); 这一句吧。
就算是在properties.load(...)这一句时构造函数又加载了一次,也不会输出"here run init()"这一句啊~
晕了~
=========================================================
我编译了下你这段代码(稍微有点修改)
import java.util.*;
public class Test{
private static Test instance = null;
public static synchronized Test getInstance() {
if(instance==null){
System.out.println("here run init()");
instance = new Test();
}
return instance;
}
private Test() {
init();
}
private void init(){
Properties p = new Properties();
try{
p.load(Test.class.getResourceAsStream("/option.properties"));
//以下是取配置,设置初始化配置的代码,此处略掉
}catch(Exception ioEx){
System.out.println("配置文件option.properties不存在");
}
}
public static void main(String[] args){
Test t1 = Test.getInstance();
Test t2 = Test.getInstance();
System.out.println(t1 == t2);
}
}
结果输出:
here run init()
配置文件option.properties不存在
true
只有一次……没什么问题啊~
===============================================
我把文件创建了,又运行了一次,输出:
here run init()
true
还是只有一次……没什么问题~
==============================================
对了
p.load(new FileInputStream("option.properties"));
这样也可以
===============================================
我装的 Java 6 Update 10
对了,你的电脑是双核的吗?
可能是双核的原因
同步出现了问题
使对象初始化了两次
我家的单核的……
以前在学校学线程那一块的时候
就因为双核的原因,有的例子老是出问题
Ⅷ java中常用的设计模式有哪些
1.单例模式(有的书上说叫单态模式其实都一样)
该模式主要目的是使内存中保持1个对象
2.工厂模式
该模式主要功能是统一提供实例对象的引用。看下面的例子:
public class Factory{
public ClassesDao getClassesDao(){
ClassesDao cd = new ClassesDaoImpl();
return cd;
}
}
interface ClassesDao{
public String getClassesName();
}
class ClassesDaoImpl implements ClassesDao {
public String getClassesName(){
System.out.println("A班");
}
}
class test
{
public static void main(String[] args){
Factory f = new Factory();
f.getClassesDao().getClassesName();
}
}
这个是最简单的例子了,就是通过工厂方法通过接口获取对象的引用
3.建造模式
该模式其实就是说,一个对象的组成可能有很多其他的对象一起组成的,比如说,一个对象的实现非常复杂,有很多的属性,而这些属性又是其他对象的引用,可能这些对象的引用又包括很多的对象引用。封装这些复杂性,就可以使用建造模式。
4.门面模式
这个模式个人感觉像是Service层的一个翻版。比如Dao我们定义了很多持久化方法,我们通过Service层将Dao的原子方法组成业务逻辑,再通过方法向上层提供服务。门面模式道理其实是一样的。
5.策略模式
这个模式是将行为的抽象,即当有几个类有相似的方法,将其中通用的部分都提取出来,从而使扩展更容易。
Ⅸ java中单态模式或单例模式(Singleton)有什么意义
网络中这样回答
单态模式,即Singleton模式主要作用是保证在面向对象编程语言设计编写的程序中,一个类Class只有一个实例存在。
这两个是一个意思。
Ⅹ java里,什么是单态,什么是多态
单态是一种设计模式,作用是保证在Java应用程序中,一个类Class只有一个实例存在。
多态嘛就是父类实例化不同的子类得到不同的结果,例如老虎和羊的父类是动物,老虎和羊都有一个方法就是吃,当分别用老虎和羊来实例化动物类并调用吃的方法时,一个是吃肉,一个是吃草,这种区别就是多态。